「遊んではいなかった」

Workspaceの切り替えということを覚えた。なぜかそれまで動かなかったRUNが一発で動くようになった。

NLP=Natural Language Processingなのね。

lemmaなんて単語があるんだ! 辞書の見出し語。

なんかやったらVSCodeのUndoの回数が少ないので以下のコードをsettings.jsonに書き込んだ。こちらのサイトを参考にさせてもらいました。

    "vim.normalModeKeyBindingsNonRecursive": [
        {
            "before" : ["u"],
            "commands" : ["undo"]
        },
        {
            "before" : ["<C-r>"],
            "commands" : ["redo"]
        },
    ],

Pythonではじめるテキストアナリティクス入門という本を読んでいる。プログラムリスト4.5のコードが動かなかったので修正した。サポートページにある「よくあるトラブルについて」で言及されてる「SudachiPyのバージョン」に起因する問題らしい。サポートページの言う通りにSudachiPyを入れ直しても良かったんだろうけど、こうやってちょっとずつコードを修正したりするのも勉強だよね。。。楽しいです。

from collections import Counter
import spacy

input_fn = 'text/kageotoko.corpus.txt'

# 1. 分析対象とする品詞と、不要語を指定する
include_pos = ('NOUN', 'VERB', 'ADJ')
stopwords = ('する', 'ある', 'ない', 'いう', 'もの', 'こと', 'よう', 'なる', 'ほう')

# 2. 解析器の用意
nlp = spacy.load('ja_ginza')

# 3. ファイルの読み込み
with open(input_fn, 'r') as f:
    lines = f.readlines()
 
chunks = [' '.join(lines[i:i+10]) for i in range(0, len(lines), 10)]
         
# 4. 文章を解析し、単語の頻度を数える
l = []
for chunk in chunks:
    doc = nlp(chunk)
    l.extend([token.lemma_ for token in doc if token.pos_ in include_pos and token.lemma_ not in stopwords])
    print(l, '...proceeding. Please wait.')
print('total words =', len(l), 'words')
counter = Counter(l)
 
# 5. 単語の出現頻度top10を出力する
print('count word')
for word, count in counter.most_common(10):
    print(f'{count:>5}{word}')

きほん

f.read()はファイル全体、改行も含めたお大きな文字列データ。 f.readline()は1行ずつのリスト。 f.read().splitlines()とすると、改行コードを含まないリストが作れるのね。