やっていること

  • Mecab を使った形態素解析
  • 辞書は NEologd を指定
  • p タグのテキストは、改行もひとつの文章の区切りとして扱う
  • ひとつの文章毎、リスト(配列)に入れる
  • 力技で名詞と形容詞を抽出して、単語をリストに詰め込む
  • 文章毎の単語を、次に返却する用のリストに入れる

単語の集め方についてはもっと良いやり方ができそうだけど、思いつくまま、ほぼ気合で実装。

utils.py

# 抜粋
import MeCab

def getWordList(text):
    text_list = []
    text_list = text.split("\n")
    # 短い文章無視
    text_list = [[s] for s in text_list if len(s)>20 ]

    mecab = MeCab.Tagger('-d /usr/lib/arm-linux-gnueabihf/mecab/dic/mecab-ipadic-neologd')
    contents = []
    text_wakachi = []
    text_tokenized = []
    words_all = []

    text_tokenized = []
    for items in text_list:
        # 改行でひとつの文章の区切りとして扱う
        # ひとつの文章毎、リスト(配列)に入れる
        text_wakachi = mecab.parse(''.join(items)).split('\n')
        words=[]
        for w in text_wakachi:
            # 力技で名詞と形容詞を抽出して、単語をリストに詰め込む
            i1 = w.split('\t')
            if len(i1)>1:
                if (i1[0] not in ('EOS', '', 't', 'ー')  and
                    i1[1].split(',')[0] in ( '名詞','形容詞') and i1[1] != '数' and
                    i1[0] not in ('さん','こと','ため','これ','もの','よう')and len(i1[0])>1):
                    words.append(i1[0])
        # 文章毎の単語を、次に返却する用のリストに入れる
        text_tokenized.append(words)
    return text_tokenized

これが正しいかは今も不明。名詞と形容詞を対象に、ストップワードもベタ打ちで指定。for 文グルグル使っているので目が回りそう。