和文ストップワード方式による用語抽出

モジュールをimport

In [1]:
import termextract.japanese_plaintext
import termextract.core

from pprint import pprint # このサンプルでの処理結果の整形表示のため

和文のプレインテキストを読み込み

テキストはWikipediaの「人工知能」記事( https://ja.wikipedia.org/wiki/%E4%BA%BA%E5%B7%A5%E7%9F%A5%E8%83%BD )から抜粋

In [2]:
f = open("jpn_sample_s.txt", "r", encoding="utf-8")
text = f.read()
f.close
print(text)
「人工知能」という名前は1956年にダートマス会議でジョン・マッカーシーにより命名された。現在では、記号処理を用いた知能の記述を主体とする情報処理や研究でのアプローチという意味あいでも使われている。日常語としての「人工知能」という呼び名は非常に曖昧なものになっており、多少気の利いた家庭用電気機械器具の制御システムやゲームソフトの思考ルーチンなどがこう呼ばれることもある。

プログラミング言語 LISP による「ELIZA」というカウンセラーを模倣したプログラムがしばしば引き合いに出されるが(人工無脳)、計算機に人間の専門家の役割をさせようという「エキスパートシステム」と呼ばれる研究・情報処理システムの実現は、人間が暗黙に持つ常識の記述が問題となり、実用への利用が困難視されている現状がある。

人工的な知能の実現へのアプローチとしては、「ファジィ理論」や「ニューラルネットワーク」などのようなアプローチも知られているが、従来の人工知能[1]との差は記述の記号的明示性にあると言えよう。近年では「サポートベクターマシン」が注目を集めた。また、自らの経験を元に学習を行う強化学習という手法もある。

「この宇宙において、知性とは最も強力な形質である」(レイ・カーツワイル)という言葉通り、知性を機械的に表現し実装するということは極めて重要な作業であると言える。

複合語抽出処理(ディクショナリとリストの両方可)

In [3]:
frequency = termextract.japanese_plaintext.cmp_noun_dict(text)
pprint(frequency)

#term_list = termextract.japanese_plaintext.cmp_noun_list(text)
#pprint(term_list)
{'1956 年': 1,
 'ELIZA': 1,
 'LISP': 1,
 'アプローチ': 3,
 'エキスパートシステム': 1,
 'カウンセラー': 1,
 'ゲームソフト': 1,
 'サポートベクターマシン': 1,
 'ジョンマッカーシー': 1,
 'ダートマス': 1,
 'ニューラルネットワーク': 1,
 'ファジィ': 1,
 'プログラミング': 1,
 'プログラム': 1,
 'レイカーツワイル': 1,
 '主 体': 1,
 '人 工 無 脳': 1,
 '人 工 的': 1,
 '人 工 知 能': 3,
 '人 間': 2,
 '作 業': 1,
 '利 用': 1,
 '制 御 システム': 1,
 '名 前': 1,
 '命 名': 1,
 '問 題': 1,
 '困 難 視': 1,
 '多 少 気': 1,
 '学 習': 1,
 '宇 宙': 1,
 '実 現': 2,
 '実 用': 1,
 '実 装': 1,
 '家 庭 用 電 気 機 械 器 具': 1,
 '専 門 家': 1,
 '常 識': 1,
 '強 力': 1,
 '強 化 学 習': 1,
 '形 質': 1,
 '役 割': 1,
 '従 来': 1,
 '思 考 ルーチン': 1,
 '情 報 処 理': 1,
 '意 味': 1,
 '手 法': 1,
 '日 常 語': 1,
 '暗 黙': 1,
 '曖 昧': 1,
 '模 倣': 1,
 '機 械 的': 1,
 '注 目': 1,
 '現 在': 1,
 '現 状': 1,
 '知 性': 2,
 '知 能': 2,
 '研 究': 1,
 '研 究 ・ 情 報 処 理 システム': 1,
 '経 験': 1,
 '表 現': 1,
 '言 葉 通': 1,
 '計 算 機': 1,
 '記 号 処 理': 1,
 '記 号 的 明 示 性': 1,
 '記 述': 3,
 '近 年': 1,
 '重 要': 1,
 '非 常': 1}

FrequencyからLRを生成する

In [4]:
lr = termextract.core.score_lr(
    frequency,
    ignore_words=termextract.japanese_plaintext.IGNORE_WORDS,
    lr_mode=1, average_rate=1)
pprint(lr)
{'1956 年': 1.4142135623730951,
 'ELIZA': 1.0,
 'LISP': 1.0,
 'アプローチ': 1.0,
 'エキスパートシステム': 1.0,
 'カウンセラー': 1.0,
 'ゲームソフト': 1.0,
 'サポートベクターマシン': 1.0,
 'ジョンマッカーシー': 1.0,
 'ダートマス': 1.0,
 'ニューラルネットワーク': 1.0,
 'ファジィ': 1.0,
 'プログラミング': 1.0,
 'プログラム': 1.0,
 'レイカーツワイル': 1.0,
 '主 体': 1.4142135623730951,
 '人 工 無 脳': 2.6321480259049848,
 '人 工 的': 3.634241185664279,
 '人 工 知 能': 3.9159461822030366,
 '人 間': 2.213363839400643,
 '作 業': 1.4142135623730951,
 '利 用': 2.0,
 '制 御 システム': 1.6983813295649528,
 '名 前': 1.681792830507429,
 '命 名': 1.681792830507429,
 '問 題': 1.4142135623730951,
 '困 難 視': 1.5874010519681994,
 '多 少 気': 1.906368585993873,
 '学 習': 2.0597671439071177,
 '宇 宙': 1.4142135623730951,
 '実 現': 2.7831576837137404,
 '実 用': 2.514866859365871,
 '実 装': 1.7782794100389228,
 '家 庭 用 電 気 機 械 器 具': 2.2384336933836315,
 '専 門 家': 1.7817974362806785,
 '常 識': 2.0597671439071177,
 '強 力': 1.5650845800732873,
 '強 化 学 習': 1.9579730911015183,
 '形 質': 1.4142135623730951,
 '役 割': 1.4142135623730951,
 '従 来': 1.4142135623730951,
 '思 考 ルーチン': 1.5874010519681994,
 '情 報 処 理': 3.01960729695421,
 '意 味': 1.4142135623730951,
 '手 法': 1.4142135623730951,
 '日 常 語': 1.8171205928321397,
 '暗 黙': 1.4142135623730951,
 '曖 昧': 1.4142135623730951,
 '模 倣': 1.4142135623730951,
 '機 械 的': 2.9416827534328798,
 '注 目': 1.4142135623730951,
 '現 在': 2.213363839400643,
 '現 状': 2.213363839400643,
 '知 性': 3.363585661014858,
 '知 能': 3.7224194364083982,
 '研 究': 2.0597671439071177,
 '研 究 ・ 情 報 処 理 システム': 2.431524179014088,
 '経 験': 1.4142135623730951,
 '表 現': 2.213363839400643,
 '言 葉 通': 1.5874010519681994,
 '計 算 機': 2.0396489026555056,
 '記 号 処 理': 3.01960729695421,
 '記 号 的 明 示 性': 2.3449773022343754,
 '記 述': 2.213363839400643,
 '近 年': 1.4142135623730951,
 '重 要': 1.4142135623730951,
 '非 常': 2.0597671439071177}

FrequencyとLRを組み合わせFLRの重要度を出す

In [5]:
term_imp = termextract.core.term_importance(frequency, lr)
pprint(term_imp)
{'1956 年': 1.4142135623730951,
 'ELIZA': 1.0,
 'LISP': 1.0,
 'アプローチ': 3.0,
 'エキスパートシステム': 1.0,
 'カウンセラー': 1.0,
 'ゲームソフト': 1.0,
 'サポートベクターマシン': 1.0,
 'ジョンマッカーシー': 1.0,
 'ダートマス': 1.0,
 'ニューラルネットワーク': 1.0,
 'ファジィ': 1.0,
 'プログラミング': 1.0,
 'プログラム': 1.0,
 'レイカーツワイル': 1.0,
 '主 体': 1.4142135623730951,
 '人 工 無 脳': 2.6321480259049848,
 '人 工 的': 3.634241185664279,
 '人 工 知 能': 11.74783854660911,
 '人 間': 4.426727678801286,
 '作 業': 1.4142135623730951,
 '利 用': 2.0,
 '制 御 システム': 1.6983813295649528,
 '名 前': 1.681792830507429,
 '命 名': 1.681792830507429,
 '問 題': 1.4142135623730951,
 '困 難 視': 1.5874010519681994,
 '多 少 気': 1.906368585993873,
 '学 習': 2.0597671439071177,
 '宇 宙': 1.4142135623730951,
 '実 現': 5.566315367427481,
 '実 用': 2.514866859365871,
 '実 装': 1.7782794100389228,
 '家 庭 用 電 気 機 械 器 具': 2.2384336933836315,
 '専 門 家': 1.7817974362806785,
 '常 識': 2.0597671439071177,
 '強 力': 1.5650845800732873,
 '強 化 学 習': 1.9579730911015183,
 '形 質': 1.4142135623730951,
 '役 割': 1.4142135623730951,
 '従 来': 1.4142135623730951,
 '思 考 ルーチン': 1.5874010519681994,
 '情 報 処 理': 3.01960729695421,
 '意 味': 1.4142135623730951,
 '手 法': 1.4142135623730951,
 '日 常 語': 1.8171205928321397,
 '暗 黙': 1.4142135623730951,
 '曖 昧': 1.4142135623730951,
 '模 倣': 1.4142135623730951,
 '機 械 的': 2.9416827534328798,
 '注 目': 1.4142135623730951,
 '現 在': 2.213363839400643,
 '現 状': 2.213363839400643,
 '知 性': 6.727171322029716,
 '知 能': 7.4448388728167965,
 '研 究': 2.0597671439071177,
 '研 究 ・ 情 報 処 理 システム': 2.431524179014088,
 '経 験': 1.4142135623730951,
 '表 現': 2.213363839400643,
 '言 葉 通': 1.5874010519681994,
 '計 算 機': 2.0396489026555056,
 '記 号 処 理': 3.01960729695421,
 '記 号 的 明 示 性': 2.3449773022343754,
 '記 述': 6.640091518201929,
 '近 年': 1.4142135623730951,
 '重 要': 1.4142135623730951,
 '非 常': 2.0597671439071177}

collectionsを使って重要度が高い順に表示

膠着言語の場合は、termextract.core.modify_agglutinative_lang()で整形をする

In [6]:
import collections
data_collection = collections.Counter(term_imp)
for cmp_noun, value in data_collection.most_common():
    print(termextract.core.modify_agglutinative_lang(cmp_noun), value, sep="\t")
人工知能	11.74783854660911
知能	7.4448388728167965
知性	6.727171322029716
記述	6.640091518201929
実現	5.566315367427481
人間	4.426727678801286
人工的	3.634241185664279
記号処理	3.01960729695421
情報処理	3.01960729695421
アプローチ	3.0
機械的	2.9416827534328798
人工無脳	2.6321480259049848
実用	2.514866859365871
研究・情報処理システム	2.431524179014088
記号的明示性	2.3449773022343754
家庭用電気機械器具	2.2384336933836315
現状	2.213363839400643
表現	2.213363839400643
現在	2.213363839400643
非常	2.0597671439071177
研究	2.0597671439071177
常識	2.0597671439071177
学習	2.0597671439071177
計算機	2.0396489026555056
利用	2.0
強化学習	1.9579730911015183
多少気	1.906368585993873
日常語	1.8171205928321397
専門家	1.7817974362806785
実装	1.7782794100389228
制御システム	1.6983813295649528
名前	1.681792830507429
命名	1.681792830507429
言葉通	1.5874010519681994
思考ルーチン	1.5874010519681994
困難視	1.5874010519681994
強力	1.5650845800732873
曖昧	1.4142135623730951
近年	1.4142135623730951
暗黙	1.4142135623730951
形質	1.4142135623730951
重要	1.4142135623730951
経験	1.4142135623730951
従来	1.4142135623730951
作業	1.4142135623730951
主体	1.4142135623730951
問題	1.4142135623730951
意味	1.4142135623730951
模倣	1.4142135623730951
注目	1.4142135623730951
手法	1.4142135623730951
1956年	1.4142135623730951
宇宙	1.4142135623730951
役割	1.4142135623730951
ゲームソフト	1.0
サポートベクターマシン	1.0
ニューラルネットワーク	1.0
LISP	1.0
ジョンマッカーシー	1.0
プログラム	1.0
ダートマス	1.0
ELIZA	1.0
プログラミング	1.0
ファジィ	1.0
レイカーツワイル	1.0
カウンセラー	1.0
エキスパートシステム	1.0
In [ ]: