自然語(yǔ)言處理之中英文分詞

編程環(huán)境:

anaconda + python3.7
完整代碼及數(shù)據(jù)已經(jīng)更新至GitHub,歡迎fork~GitHub鏈接


聲明:創(chuàng)作不易,未經(jīng)授權(quán)不得復(fù)制轉(zhuǎn)載
statement:No reprinting without authorization


中文分詞工具
1纳胧、Jieba(重點(diǎn))传货,三種分詞模式與自定義詞典功能
2辫红、SnowNLP
3谜叹、THULAC
4交煞、NLPIR:https://github.com/tsroten/pynlpir
5、NLPIR:https://blog.csdn.net/weixin_34613450/article/details/78695166
6砖第、StanfordCoreNLP
7、HanLP(需要額外安裝 Microsoft Visual C++ 14.0)安裝教程
英文分詞工具
1环凿、NLTK:
http://www.nltk.org/index.html
https://github.com/nltk/nltk
http://www.reibang.com/p/9d232e4a3c28

主要內(nèi)容:

? ? ? ?利用給定的中英文文本序列(見(jiàn) Chinese.txt 和 English.txt)梧兼,分別利用以下給定的中 英文分詞工具進(jìn)行分詞并對(duì)不同分詞工具產(chǎn)生的結(jié)果進(jìn)行簡(jiǎn)要對(duì)比分析。

一智听、在python環(huán)境中安裝好各種工具包:

主要利用到pip命令羽杰,一般都能快速成功安裝渡紫。其中有幾個(gè)需注意的地方:

(1)第一是Stanfordcorenlp的安裝過(guò)程中:

? ? ? ?首先要配置好java環(huán)境,下載安裝1.8版本以上的JDK;配置好Java的環(huán)境變量Path和java_home等考赛,需要注意最好重啟讓系統(tǒng)環(huán)境變量生效惕澎;否則可能遇到如下報(bào)錯(cuò):


image.png

? ? ? ?而后需要下載外接文件包,注意python的版本下載對(duì)應(yīng)的包颜骤,而后進(jìn)行解壓唧喉,對(duì)中文進(jìn)行處理時(shí)需要再另外下載一個(gè)對(duì)應(yīng)的Chinese的jar包,放入之前的解壓文件夾中忍抽。

(2)第二是spacy安裝的過(guò)程中八孝,可能會(huì)遇到權(quán)限不夠的提示,

方法1是:要用管理員模式啟動(dòng)命令行
方法2是:用 nlp = spacy.load('en_core_web_sm')代替原來(lái)的nlp = spacy.load(’en’)

(3)第三是注意文字編碼:

有些工具包需要指定為Unicode的編碼模式鸠项,不然可能會(huì)有一些問(wèn)題干跛。

二、編寫(xiě)代碼運(yùn)行測(cè)試:

# -*- coding: utf-8 -*-
"""
Created on Tue Mar 18 09:43:47 2019
@author: Mr.relu
"""
import time
import jieba
from snownlp import SnowNLP
import thulac   
import pynlpir
from stanfordcorenlp import StanfordCoreNLP
import nltk
import spacy 
spacy_nlp = spacy.load('en_core_web_sm')

f = open('Chinese.txt')
document = f.read()
f.close()
print(document)    

"""
測(cè)試工具包jieba
"""
print(">>>>>jieba tokenization start...")
start = time.process_time()

seg_list = jieba.cut(str(document), cut_all=True)

elapsed = (time.process_time() - start)
print("jieba 01 Time used:",elapsed)

print("《《jieba Full Mode》》: \n" + "/ ".join(seg_list))  # 全模式

start = time.process_time()
seg_list = jieba.cut(document, cut_all=False)
elapsed = (time.process_time() - start)
print("jieba 02 Time used:",elapsed)
print("《《jieba Default Mode》》: \n" + "/ ".join(seg_list))  # 精確模式

start = time.process_time()
seg_list = jieba.cut_for_search(document)  # 搜索引擎模式
elapsed = (time.process_time() - start)
print("jieba 03 Time used:",elapsed)
print("《《jieba Search Model》》: \n" + "/ ".join(seg_list))

"""
測(cè)試工具包SnowNLP
"""
print(">>>>>SnowNLP tokenization start...")
start = time.process_time()
s = SnowNLP(document)
result = s.words                    # [u'這個(gè)', u'東西', u'真心',
elapsed = (time.process_time() - start)
print("SnowNLP Time used:",elapsed)
print("《《SnowNLP》》: \n" + "/ ".join(result))                        #  u'很', u'贊']
#result = s.tags          # [(u'這個(gè)', u'r'), (u'東西', u'n'),
#print(result)                #  (u'真心', u'd'), (u'很', u'd'),
#                        #  (u'贊', u'Vg')]
#result = s.sentiments    # 0.9769663402895832 positive的概率
#print(result)
#result = s.pinyin        # [u'zhe', u'ge', u'dong', u'xi',
#print(result)                #  u'zhen', u'xin', u'hen', u'zan']
#s = SnowNLP(u'「繁體字」「繁體中文」的叫法在臺(tái)灣亦很常見(jiàn)祟绊。')
#
#s.han           # u'「繁體字」「繁體中文」的叫法
#                # 在臺(tái)灣亦很常見(jiàn)楼入。'
"""
測(cè)試thulac工具包
"""
print(">>>>>thulac tokenization start...")
start = time.process_time()
thu1 = thulac.thulac(seg_only=True)  #默認(rèn)模式
text = thu1.cut(document, text=True)  #進(jìn)行一句話分詞
elapsed = (time.process_time() - start)
print("thulac Time used:",elapsed)
print("《《thulac》》: \n" + "/ ".join(text))    
#thu1 = thulac.thulac(seg_only=True)  #只進(jìn)行分詞,不進(jìn)行詞性標(biāo)注
#thu1.cut_f("Chinese.txt", "output.txt")  #對(duì)input.txt文件內(nèi)容進(jìn)行分詞牧抽,輸出到output.txt

"""
測(cè)試pynlpir工具包
"""
print(">>>>>pynlpir tokenization start...")
start = time.process_time()
pynlpir.open()
resu = pynlpir.segment(document,pos_tagging=False)

elapsed = (time.process_time() - start)
print("pynlpir Time used:",elapsed)

print("《《pynlpir》》: \n" + "/ ".join(resu)) 
"""
pynlpir.segment(s, pos_tagging=True, pos_names=‘parent‘, pos_english=True)
pynlpir.get_key_words(s, max_words=50, weighted=False)
分詞:pynlpir.segment(s, pos_tagging=True, pos_names=‘parent‘, pos_english=True) 
S: 句子 
pos_tagging:是否進(jìn)行詞性標(biāo)註 
pos_names:顯示詞性的父類(parent)還是子類(child) 或者全部(all) 
pos_english:詞性顯示英語(yǔ)還是中文
獲取關(guān)鍵詞:pynlpir.get_key_words(s, max_words=50, weighted=False) 
s: 句子 
max_words:最大的關(guān)鍵詞數(shù) 
weighted:是否顯示關(guān)鍵詞的權(quán)重
"""
"""
測(cè)試StanfordCoreNLP工具包
"""
print(">>>>>StanfordCoreNLP tokenization start...")
start = time.process_time()
nlp = StanfordCoreNLP(r'D:\anaconda\Lib\stanford-corenlp-full-2018-02-27',lang = 'zh')
outWords = nlp.word_tokenize(document)
elapsed = (time.process_time() - start)
print("StanfordCoreNLP Time used:",elapsed)
print("《《StanfordCoreNLP》》: \n" + "/ ".join(outWords))
#print 'Part of Speech:', nlp.pos_tag(sentence)
#print 'Named Entities:', nlp.ner(sentence)
#print 'Constituency Parsing:', nlp.parse(sentence)
#print 'Dependency Parsing:', nlp.dependency_parse(sentence)
nlp.close() # Do not forget to close! The backend server will consume a lot memery.

"""
英文分詞NLTK
"""
f = open('English.txt')
doc = f.read()
f.close()
print(doc)

print(">>>>>NLTK tokenization start...")
start = time.process_time()
tokens = nltk.word_tokenize(doc)
elapsed = (time.process_time() - start)
print("NLTK Time used:",elapsed)
print("《《NLTK》》: \n" + "/ ".join(tokens))

"""
英文分詞spacy
"""
print(">>>>>spacy tokenization start...")
start = time.process_time()
s_doc = spacy_nlp(doc)
elapsed = (time.process_time() - start)
print("spacy Time used:",elapsed)

token_doc =[]
for token in s_doc:
    token = str(token)
    token_doc.append(token)
print("《《Spacy》》: \n" + "/ ".join(token_doc))

"""
英文分詞StanfordCoreNLP
"""
print(">>>>>StanfordCoreNLP tokenization start...")
start = time.process_time()
nlp2 = StanfordCoreNLP(r'D:\anaconda\Lib\stanford-corenlp-full-2018-02-27')
outWords = nlp2.word_tokenize(doc)
elapsed = (time.process_time() - start)
print("StanfordCoreNLP Time used:",elapsed)
print("《《StanfordCoreNLP>>: \n" + "/ ".join(outWords))
nlp2.close() # Do not forget to close! The backend server will consume a lot memery.

部分結(jié)果展示:

result

result
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嘉熊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子阎姥,更是在濱河造成了極大的恐慌记舆,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呼巴,死亡現(xiàn)場(chǎng)離奇詭異泽腮,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)衣赶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)诊赊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人府瞄,你說(shuō)我怎么就攤上這事碧磅。” “怎么了遵馆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵鲸郊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我货邓,道長(zhǎng)秆撮,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任换况,我火速辦了婚禮职辨,結(jié)果婚禮上盗蟆,老公的妹妹穿的比我還像新娘。我一直安慰自己舒裤,他們只是感情好喳资,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著腾供,像睡著了一般仆邓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上台腥,一...
    開(kāi)封第一講書(shū)人閱讀 50,021評(píng)論 1 291
  • 那天宏赘,我揣著相機(jī)與錄音,去河邊找鬼黎侈。 笑死察署,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的峻汉。 我是一名探鬼主播贴汪,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼休吠!你這毒婦竟也來(lái)了扳埂?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瘤礁,失蹤者是張志新(化名)和其女友劉穎阳懂,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體柜思,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡岩调,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赡盘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片号枕。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖陨享,靈堂內(nèi)的尸體忽然破棺而出葱淳,到底是詐尸還是另有隱情,我是刑警寧澤抛姑,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布赞厕,位于F島的核電站,受9級(jí)特大地震影響定硝,放射性物質(zhì)發(fā)生泄漏坑傅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一喷斋、第九天 我趴在偏房一處隱蔽的房頂上張望唁毒。 院中可真熱鬧,春花似錦星爪、人聲如沸浆西。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)近零。三九已至,卻和暖如春抄肖,著一層夾襖步出監(jiān)牢的瞬間久信,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工漓摩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留裙士,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓管毙,卻偏偏與公主長(zhǎng)得像腿椎,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子夭咬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350