中文形態素解析器(nlpir)による用語抽出

モジュールをimport

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

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

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

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

In [2]:
f = open("chi_sample_s.txt", "r", encoding="utf-8")
text = f.read()
f.close
print(text)
人工智能(英语:Artificial Intelligence, AI)亦稱機器智能,是指由人工製造出來的系統所表現出來的智能。通常人工智能是指通過普通電腦實現的智能。該詞同時也指研究這樣的智能系統是否能夠實現,以及如何實現的科學領域。

一般教材中的定义领域是“智能主体(intelligent agent)的研究与设计”[1],智能主体是指一个可以观察周遭环境并作出行动以达致目标的系统。[2]约翰·麦卡锡于1955年的定义是[3]「制造智能机器的科学与工程。」[4]

人工智能的研究是高度技术性和专业的,各分支领域都是深入且各不相通的,因而涉及範圍極廣。[5]

人工智能的研究可以分为几个技术问题。其分支领域主要集中在解决具体问题,其中之一是,如何使用各种不同的工具完成特定的应用程序。AI的核心问题包括推理、知识、规划、学习、交流、感知、移动和操作物体的能力等。[6]強人工智能目前仍然是该领域的长远目标。[7]目前比较流行的方法包括统计方法,计算智能和传统意义的AI。目前有大量的工具应用了人工智能,其中包括搜索和数学优化、逻辑推演。而基於仿生學、認知心理學,以及基于概率论和经济学的演算法等等也在逐步探索當中。

nlpir (ICTCLAS)で中文処理

事前にpynlpir (Pythonパッケージ)のインストールが必要

In [3]:
import pynlpir
pynlpir.open()
text = text.replace('\n',' ') # 改行は削除しておく
tagged_text = pynlpir.segment(text)
pprint(tagged_text)
[('人工智能', 'noun'),
 ('(', 'punctuation mark'),
 ('英语', 'noun'),
 (':', 'punctuation mark'),
 ('Artificial', 'noun'),
 (' ', None),
 ('Intelligence', 'noun'),
 (',', 'punctuation mark'),
 (' ', None),
 ('AI', 'noun'),
 (')', 'punctuation mark'),
 ('亦', 'adverb'),
 ('稱', 'noun'),
 ('機', 'noun'),
 ('器', 'noun'),
 ('智能', 'noun'),
 (',', 'punctuation mark'),
 ('是', 'verb'),
 ('指', 'verb'),
 ('由', 'preposition'),
 ('人工', 'distinguishing word'),
 ('製', 'noun'),
 ('造', 'verb'),
 ('出', 'verb'),
 ('來', 'noun'),
 ('的', 'particle'),
 ('系', 'noun'),
 ('統', 'noun'),
 ('所', 'particle'),
 ('表', 'verb'),
 ('現', 'noun'),
 ('出', 'verb'),
 ('來', 'noun'),
 ('的', 'particle'),
 ('智能', 'noun'),
 ('。', 'punctuation mark'),
 ('通常', 'distinguishing word'),
 ('人工智能', 'noun'),
 ('是', 'verb'),
 ('指', 'verb'),
 ('通', 'verb'),
 ('過', 'noun'),
 ('普通', 'adjective'),
 ('電', 'noun'),
 ('腦', 'noun'),
 ('實', 'noun'),
 ('現', 'noun'),
 ('的', 'particle'),
 ('智能', 'noun'),
 ('。', 'punctuation mark'),
 ('該', 'noun'),
 ('詞', 'noun'),
 ('同', 'preposition'),
 ('時', 'noun'),
 ('也', 'adverb'),
 ('指', 'verb'),
 ('研究', 'verb'),
 ('這', 'noun'),
 ('樣', 'noun'),
 ('的', 'particle'),
 ('智能', 'noun'),
 ('系', 'verb'),
 ('統', 'noun'),
 ('是否', 'verb'),
 ('能', 'verb'),
 ('夠', 'noun'),
 ('實', 'noun'),
 ('現', 'noun'),
 (',', 'punctuation mark'),
 ('以及', 'conjunction'),
 ('如何', 'pronoun'),
 ('實', 'noun'),
 ('現', 'noun'),
 ('的', 'particle'),
 ('科', 'noun'),
 ('學', 'noun'),
 ('領', 'noun'),
 ('域', 'noun'),
 ('。', None),
 ('', 'punctuation mark'),
 ('一般', 'adjective'),
 ('教材', 'noun'),
 ('中', 'noun of locality'),
 ('的', 'particle'),
 ('定义', 'noun'),
 ('领域', 'noun'),
 ('是', 'verb'),
 ('“', 'punctuation mark'),
 ('智能', 'noun'),
 ('主体', 'noun'),
 ('(', 'punctuation mark'),
 ('intelligent', 'adjective'),
 (' ', None),
 ('agent', 'noun'),
 (')', 'punctuation mark'),
 ('的', 'particle'),
 ('研究', 'verb'),
 ('与', 'conjunction'),
 ('设计', 'verb'),
 ('”', 'punctuation mark'),
 ('[1]', 'string'),
 (',', 'punctuation mark'),
 ('智能', 'noun'),
 ('主体', 'noun'),
 ('是', 'verb'),
 ('指', 'verb'),
 ('一个', 'numeral'),
 ('可以', 'verb'),
 ('观察', 'verb'),
 ('周', 'noun'),
 ('遭', 'verb'),
 ('环境', 'noun'),
 ('并', 'conjunction'),
 ('作出', 'verb'),
 ('行动', 'verb'),
 ('以', 'preposition'),
 ('达', 'verb'),
 ('致', 'verb'),
 ('目标', 'noun'),
 ('的', 'particle'),
 ('系统', 'noun'),
 ('。', 'punctuation mark'),
 ('[2]', 'string'),
 ('约翰·麦卡锡', 'noun'),
 ('于', 'preposition'),
 ('1955年', 'time word'),
 ('的', 'particle'),
 ('定义', 'noun'),
 ('是', 'verb'),
 ('[3]', 'string'),
 ('「', 'punctuation mark'),
 ('制造', 'verb'),
 ('智能', 'noun'),
 ('机器', 'noun'),
 ('的', 'particle'),
 ('科学', 'noun'),
 ('与', 'conjunction'),
 ('工程', 'noun'),
 ('。', 'punctuation mark'),
 ('」', 'punctuation mark'),
 ('[4]', 'string'),
 (' ', None),
 (' ', None),
 ('人工智能', 'noun'),
 ('的', 'particle'),
 ('研究', 'verb'),
 ('是', 'verb'),
 ('高度', 'noun'),
 ('技术性', 'noun'),
 ('和', 'conjunction'),
 ('专业', 'noun'),
 ('的', 'particle'),
 (',', 'punctuation mark'),
 ('各', 'pronoun'),
 ('分支', 'noun'),
 ('领域', 'noun'),
 ('都', 'adverb'),
 ('是', 'verb'),
 ('深入', 'verb'),
 ('且', 'conjunction'),
 ('各', 'pronoun'),
 ('不', 'adverb'),
 ('相通', 'verb'),
 ('的', 'particle'),
 (',', 'punctuation mark'),
 ('因而', 'conjunction'),
 ('涉及', 'verb'),
 ('範', 'punctuation mark'),
 ('圍', 'punctuation mark'),
 ('極', 'punctuation mark'),
 ('廣', 'punctuation mark'),
 ('。', 'punctuation mark'),
 ('[5]', 'string'),
 (' ', None),
 (' ', None),
 ('人工智能', 'noun'),
 ('的', 'particle'),
 ('研究', 'verb'),
 ('可以', 'verb'),
 ('分为', 'verb'),
 ('几', 'numeral'),
 ('个', 'classifier'),
 ('技术', 'noun'),
 ('问题', 'noun'),
 ('。', 'punctuation mark'),
 ('其', 'pronoun'),
 ('分支', 'noun'),
 ('领域', 'noun'),
 ('主要', 'adverb'),
 ('集中', 'verb'),
 ('在', 'preposition'),
 ('解决', 'verb'),
 ('具体', 'adjective'),
 ('问题', 'noun'),
 (',', 'punctuation mark'),
 ('其中', 'pronoun'),
 ('之一', 'pronoun'),
 ('是', 'verb'),
 (',', 'punctuation mark'),
 ('如何', 'pronoun'),
 ('使用', 'verb'),
 ('各种', 'pronoun'),
 ('不同', 'adjective'),
 ('的', 'particle'),
 ('工具', 'noun'),
 ('完成', 'verb'),
 ('特定', 'distinguishing word'),
 ('的', 'particle'),
 ('应用', 'verb'),
 ('程序', 'noun'),
 ('。', 'punctuation mark'),
 ('AI', 'noun'),
 ('的', 'particle'),
 ('核心', 'noun'),
 ('问题', 'noun'),
 ('包括', 'verb'),
 ('推理', 'verb'),
 ('、', 'punctuation mark'),
 ('知识', 'noun'),
 ('、', 'punctuation mark'),
 ('规划', 'noun'),
 ('、', 'punctuation mark'),
 ('学习', 'verb'),
 ('、', 'punctuation mark'),
 ('交流', 'verb'),
 ('、', 'punctuation mark'),
 ('感知', 'verb'),
 ('、', 'punctuation mark'),
 ('移动', 'verb'),
 ('和', 'conjunction'),
 ('操作', 'verb'),
 ('物体', 'noun'),
 ('的', 'particle'),
 ('能力', 'noun'),
 ('等', 'particle'),
 ('。', 'punctuation mark'),
 ('[6]', 'string'),
 ('強', 'punctuation mark'),
 ('人工智能', 'noun'),
 ('目前', 'time word'),
 ('仍然', 'adverb'),
 ('是', 'verb'),
 ('该', 'pronoun'),
 ('领域', 'noun'),
 ('的', 'particle'),
 ('长远', 'adjective'),
 ('目标', 'noun'),
 ('。', 'punctuation mark'),
 ('[7]', 'string'),
 ('目前', 'time word'),
 ('比较', 'adverb'),
 ('流行', 'verb'),
 ('的', 'particle'),
 ('方法', 'noun'),
 ('包括', 'verb'),
 ('统计', 'verb'),
 ('方法', 'noun'),
 (',', 'punctuation mark'),
 ('计算', 'verb'),
 ('智能', 'noun'),
 ('和', 'conjunction'),
 ('传统', 'noun'),
 ('意义', 'noun'),
 ('的', 'particle'),
 ('AI', 'noun'),
 ('。', 'punctuation mark'),
 ('目前', 'time word'),
 ('有', 'verb'),
 ('大量', 'numeral'),
 ('的', 'particle'),
 ('工具', 'noun'),
 ('应用', 'verb'),
 ('了', 'particle'),
 ('人工智能', 'noun'),
 (',', 'punctuation mark'),
 ('其中', 'pronoun'),
 ('包括', 'verb'),
 ('搜索', 'verb'),
 ('和', 'conjunction'),
 ('数学', 'noun'),
 ('优化', 'verb'),
 ('、', 'punctuation mark'),
 ('逻辑', 'noun'),
 ('推演', 'verb'),
 ('。', 'punctuation mark'),
 ('而', 'conjunction'),
 ('基', 'noun'),
 ('於', 'noun'),
 ('仿生', 'distinguishing word'),
 ('學', 'punctuation mark'),
 ('、', 'punctuation mark'),
 ('認', 'punctuation mark'),
 ('知心', 'adjective'),
 ('理', 'noun'),
 ('學', 'punctuation mark'),
 (',', 'punctuation mark'),
 ('以及', 'conjunction'),
 ('基于', 'preposition'),
 ('概率论', 'noun'),
 ('和', 'conjunction'),
 ('经济学', 'noun'),
 ('的', 'particle'),
 ('演算', 'verb'),
 ('法', 'noun'),
 ('等', 'particle'),
 ('等', 'verb'),
 ('也', 'adverb'),
 ('在', 'preposition'),
 ('逐步', 'adverb'),
 ('探索', 'verb'),
 ('當', 'punctuation mark'),
 ('中', 'noun of locality'),
 ('。', 'punctuation mark')]

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

In [4]:
frequency = termextract.nlpir.cmp_noun_dict(tagged_text)
pprint(frequency)

#term_list = termextract.nlpir.cmp_noun_list(tagged_text)
#pprint(term_list)
{'AI': 3,
 'Artificial': 1,
 'Intelligence': 1,
 'agent': 1,
 'intelligent': 1,
 '一般 教材': 1,
 '不同 的 工具': 1,
 '与': 1,
 '专业': 1,
 '了 人工智能': 1,
 '人工 製': 1,
 '人工智能': 4,
 '传统 意义': 1,
 '來': 2,
 '具体 问题': 1,
 '分支 领域': 2,
 '周': 1,
 '和': 1,
 '和 数学': 1,
 '基 於': 1,
 '夠 實 現': 1,
 '實 現': 1,
 '工程': 1,
 '技术 问题': 1,
 '方法': 1,
 '時': 1,
 '普通 電 腦 實 現': 1,
 '智能': 4,
 '智能 主体': 2,
 '智能 机器': 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,
 '逻辑': 1,
 '過': 1,
 '长远 目标': 1,
 '领域': 1,
 '高度 技术性': 1}

FrequencyからLRを生成する

In [5]:
lr = termextract.core.score_lr(
    frequency,
    ignore_words=termextract.nlpir.IGNORE_WORDS,
    lr_mode=1, average_rate=1)
pprint(lr)
{'AI': 1.0,
 'Artificial': 1.0,
 'Intelligence': 1.0,
 'agent': 1.0,
 'intelligent': 1.0,
 '一般 教材': 1.4142135623730951,
 '不同 的 工具': 1.2599210498948732,
 '与': 1.0,
 '专业': 1.0,
 '了 人工智能': 1.5650845800732873,
 '人工 製': 1.4142135623730951,
 '人工智能': 1.7320508075688772,
 '传统 意义': 1.4142135623730951,
 '來': 1.0,
 '具体 问题': 1.681792830507429,
 '分支 领域': 1.8612097182041991,
 '周': 1.0,
 '和': 1.0,
 '和 数学': 1.0,
 '基 於': 1.4142135623730951,
 '夠 實 現': 2.1398263878673256,
 '實 現': 2.6321480259049848,
 '工程': 1.0,
 '技术 问题': 1.681792830507429,
 '方法': 1.0,
 '時': 1.0,
 '普通 電 腦 實 現': 2.0827594879848212,
 '智能': 2.8284271247461903,
 '智能 主体': 2.213363839400643,
 '智能 机器': 2.0,
 '核心 问题': 1.681792830507429,
 '概率论': 1.0,
 '法': 1.0,
 '物体': 1.0,
 '特定': 1.0,
 '环境': 1.0,
 '現': 2.0,
 '的': 1.0,
 '的 定义': 1.189207115002721,
 '的 定义 领域': 1.414213562373095,
 '的 工具': 1.189207115002721,
 '的 方法': 1.0,
 '目标': 1.4142135623730951,
 '知心 理': 1.4142135623730951,
 '知识': 1.0,
 '科 學 領 域': 1.681792830507429,
 '科学': 1.0,
 '程序': 1.0,
 '稱 機 器 智能': 2.0,
 '系 統': 1.4142135623730951,
 '系统': 1.0,
 '統': 1.4142135623730951,
 '约翰·麦卡锡': 1.0,
 '经济学': 1.0,
 '能力': 1.0,
 '英语': 1.0,
 '规划': 1.0,
 '該 詞': 1.4142135623730951,
 '這 樣': 1.4142135623730951,
 '通常 人工智能': 1.5650845800732873,
 '逻辑': 1.0,
 '過': 1.0,
 '长远 目标': 1.4142135623730951,
 '领域': 2.0,
 '高度 技术性': 1.4142135623730951}

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

In [6]:
term_imp = termextract.core.term_importance(frequency, lr)
pprint(term_imp)
{'AI': 3.0,
 'Artificial': 1.0,
 'Intelligence': 1.0,
 'agent': 1.0,
 'intelligent': 1.0,
 '一般 教材': 1.4142135623730951,
 '不同 的 工具': 1.2599210498948732,
 '与': 1.0,
 '专业': 1.0,
 '了 人工智能': 1.5650845800732873,
 '人工 製': 1.4142135623730951,
 '人工智能': 6.928203230275509,
 '传统 意义': 1.4142135623730951,
 '來': 2.0,
 '具体 问题': 1.681792830507429,
 '分支 领域': 3.7224194364083982,
 '周': 1.0,
 '和': 1.0,
 '和 数学': 1.0,
 '基 於': 1.4142135623730951,
 '夠 實 現': 2.1398263878673256,
 '實 現': 2.6321480259049848,
 '工程': 1.0,
 '技术 问题': 1.681792830507429,
 '方法': 1.0,
 '時': 1.0,
 '普通 電 腦 實 現': 2.0827594879848212,
 '智能': 11.313708498984761,
 '智能 主体': 4.426727678801286,
 '智能 机器': 2.0,
 '核心 问题': 1.681792830507429,
 '概率论': 1.0,
 '法': 1.0,
 '物体': 1.0,
 '特定': 1.0,
 '环境': 1.0,
 '現': 2.0,
 '的': 2.0,
 '的 定义': 1.189207115002721,
 '的 定义 领域': 1.414213562373095,
 '的 工具': 1.189207115002721,
 '的 方法': 1.0,
 '目标': 1.4142135623730951,
 '知心 理': 1.4142135623730951,
 '知识': 1.0,
 '科 學 領 域': 1.681792830507429,
 '科学': 1.0,
 '程序': 1.0,
 '稱 機 器 智能': 2.0,
 '系 統': 1.4142135623730951,
 '系统': 1.0,
 '統': 1.4142135623730951,
 '约翰·麦卡锡': 1.0,
 '经济学': 1.0,
 '能力': 1.0,
 '英语': 1.0,
 '规划': 1.0,
 '該 詞': 1.4142135623730951,
 '這 樣': 1.4142135623730951,
 '通常 人工智能': 1.5650845800732873,
 '逻辑': 1.0,
 '過': 1.0,
 '长远 目标': 1.4142135623730951,
 '领域': 2.0,
 '高度 技术性': 1.4142135623730951}

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

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

In [7]:
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.313708498984761
人工智能	6.928203230275509
智能主体	4.426727678801286
分支领域	3.7224194364083982
AI	3.0
實現	2.6321480259049848
夠實現	2.1398263878673256
普通電腦實現	2.0827594879848212
智能机器	2.0
來	2.0
現	2.0
的	2.0
稱機器智能	2.0
领域	2.0
技术问题	1.681792830507429
科學領域	1.681792830507429
具体问题	1.681792830507429
核心问题	1.681792830507429
了人工智能	1.5650845800732873
通常人工智能	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.414213562373095
不同的工具	1.2599210498948732
的定义	1.189207115002721
的工具	1.189207115002721
Intelligence	1.0
的方法	1.0
intelligent	1.0
方法	1.0
工程	1.0
英语	1.0
過	1.0
周	1.0
和数学	1.0
系统	1.0
与	1.0
和	1.0
agent	1.0
专业	1.0
特定	1.0
物体	1.0
约翰·麦卡锡	1.0
概率论	1.0
科学	1.0
环境	1.0
知识	1.0
经济学	1.0
能力	1.0
Artificial	1.0
時	1.0
程序	1.0
规划	1.0
逻辑	1.0
法	1.0
In [ ]: