LoginSignup
3
2

More than 3 years have passed since last update.

形態素解析の結果を利用してTF法により特徴抽出をする

Last updated at Posted at 2020-12-28

はじめに

本記事では、文書分類器を実装するための特徴抽出方法としてのTF(Term Frequency method)法について解説する。

1. 形態素解析

文書分類では、文書内の単語の情報を利用する。日本語は英語のように単語の区切りが明示された分かち書き言語ではなく、非分かち書き言語であり、そのため、文書内の各文を単語に分割する必要がある。文を単語に分割し、各単語の品詞を推定することを形態素解析という。

ここでは、オープンソース形態素解析ソフトウェア MeCab(めかぶ)を使う.
http://taku910.github.io/mecab/

2. 特徴抽出

分類問題を扱う際、一般に、データ中の、分類に利用する情報のことを特徴量と呼び、この特徴量をデータから抽出する作業を特徴抽出と呼ぶ。
文書の分類では、文書中の単語が特徴量として利用される。

文書内の各単語の出現頻度は、しばしば、単語の重みとして利用される。この重み付け法をTF法(Term Frequency method)と呼ぶ。TF 法では、出現頻度の高い単語ほどその文書において特徴的な単語であるとみなす。なお、単語の並び、出現順序は考慮されないことに注意。

3. 実装コード

tf.py
import MeCab as mc
from collections import Counter
import sys
import fileinput
from pathlib import Path

def mecab_analysis(text):
    t = mc.Tagger("-Ochasen")
    t.parse('')
    node = t.parseToNode(text)
    output = []
    while node:
        if node.surface != "":
            word_type = node.feature.split(",")[0]
            if word_type in ["形容詞","動詞","名詞","副詞","助動詞","記号","助詞"]:
                output.append(node.surface)
        node = node.next
        if node is None:
            break
    return output

if Path(sys.argv[1]).exists():  
    for line in fileinput.input():  
        if line:
            line = line.replace('"', '')
            line = line.replace('\\', '')
            words = mecab_analysis(line)
            counter = Counter(words)
            for word, count in counter.most_common():
                if len(word) > 0:
                    print("%s:%d "%(word, count),end ="")
            print("")
        else:
            break

4. 実行方法

対象ファイル
test.txt
コンパクトで部屋の隅に立てかけておいて、使いたいときにすぐに使えます。吸引力もすばらしく、こんなにホコリがあったの?と驚きます。値段も手頃、お勧め商品です。
こちらのレビューを見て購入を決めました。うちの掃除機は日立製(昨年購入)なのに吸い口に合わず、付属のアタッチメントでなんとかくっついているという感じです。でもグラグラなので当然かけている最中に何度も外れてしまいます。確かに布は吸い込まずに布団に掃除機をかけることはできますが、同じ日立製なのに合わないなんてがっかりしました。どれ位ほこりがたまるか楽しみで、新しい紙パックに取り換えてから掃除をしてみました。一通りかけ終わり、紙パックの中をのぞいてみましたがたまっていませんでした。グラグラだからほこりを吸い込んでいないのでしょうか?またまたがっかりです。

各行がそれぞれ入力文書となる。

実行方法

次のようにしてコマンドを実行する。

python3 tf.py test.txt > output.txt

第一引数に対象ファイルを与え、TF法により特徴抽出がされた結果をここではoutput.txtに出力している。

出力
output.txt
に:3 、:3 。:3 の:2 て:2 ます:2 も:2 コンパクト:1 で:1 部屋:1 隅:1 立てかけ:1 おい:1 使い:1 たい:1 とき:1 すぐ:1 使え:1 吸引:1 力:1 すばらしく:1 こんなに:1 ホコリ:1 が:1 あっ:1 た:1 ?:1 と:1 驚き:1 値段:1 手頃:1 勧め:1 商品:1 です:1 
て:8 。:7 に:7 の:6 を:6 た:5 まし:4 、:4 掃除:3 は:3 な:3 で:3 が:3 購入:2 機:2 日立:2 製:2 合わ:2 ず:2 いる:2 です:2 グラグラ:2 かけ:2 ます:2 ない:2 がっかり:2 し:2 ほこり:2 か:2 紙:2 パック:2 み:2 い:2 こちら:1 レビュー:1 見:1 決め:1 うち:1 (:1 昨年:1 ):1 吸い:1 口:1 付属:1 アタッチメント:1 なんとか:1 くっつい:1 という:1 感じ:1 ので:1 当然:1 最中:1 何:1 度:1 も:1 外れ:1 しまい:1 確か:1 布:1 吸い込ま:1 布団:1 かける:1 こと:1 でき:1 のに:1 なんて:1 どれ:1 位:1 たまる:1 楽しみ:1 新しい:1 取り換え:1 から:1 一:1 通り:1 終わり:1 中:1 のぞい:1 たまっ:1 ませ:1 ん:1 でし:1 吸い込ん:1 でしょ:1 う:1 ?:1 またまた:1 

特徴抽出結果が出力されている。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2