Photo by
karasu_toragara
SQLiteに格納された日本語のノート本文(文章)を、PythonとJanomeで形態素解析し、有効な名詞のみを抽出して、単語の出現回数をカウント・集計する
Ubuntu上のNextcloud側のノートをSQLiteに入れて、ローカル軽量LLMに分析させる全段階として、頻出語を調べさせてみました。
こと: 421
社会: 291
構造: 204
よう: 196
問題: 164
歴史: 164
技術: 146
分析: 140
情報: 137
時代:136
人間: 129
現代: ……
# Janomeの形態素解析器をインポート
from janome.tokenizer import Tokenizer
# 単語の出現回数をカウントするためにCounterをインポート
from collections import Counter
# SQLiteデータベースに接続するためのモジュール
import sqlite3
# SQLiteのノートデータベースのパス(適宜変更)
db_path = "パス"
# データベースに接続
conn = sqlite3.connect(db_path)
cur = conn.cursor()
# テーブルからxx列をすべて取得
cur.execute("")
# 取得した行をリストとして格納
rows = cur.fetchall()
# データベース接続を閉じる
conn.close()
# Janomeのトークナイザを初期化
tokenizer = Tokenizer()
# 単語の頻度を記録するカウンターを初期化
counter = Counter()
# 単語が有効かどうかを判定する関数(ノイズ除去のため)
def is_valid_token(token):
# 名詞以外は除外
if not token.part_of_speech.startswith("名詞"):
return False
surface = token.surface
# 1文字以下は除外
if len(surface) <= 1:
return False
# 英数字(ASCII)は除外
if surface.isascii():
return False
# 特殊記号や数字が含まれていたら除外
if any(c in surface for c in ".。、・:;()()[]{}<><>@!\"'#%&=~^|\\`+$*?/_-0123456789"):
return False
return True
# 全てのノート本文について処理
for (text,) in rows:
# トークン化(形態素解析)
tokens = tokenizer.tokenize(text)
# 有効な単語だけを抽出
words = [token.surface for token in tokens if is_valid_token(token)]
# 単語頻度を更新
counter.update(words)
# 出現頻度の高い上位30語を表示
for word, count in counter.most_common(30):
print(f"{word}: {count}")
もう少し探求してみます。
いいなと思ったら応援しよう!
ここまでお読み下さり感謝。各種SNSでのシェアも励みになります。非営利の取り組みが多いため、チップのご検討、助かります。