自然语言处理之中英文分词

编程环境:

anaconda + python3.7
完整代码及数据已经更新至GitHub,欢迎fork~GitHub链接


声明:创作不易,未经授权不得复制转载
statement:No reprinting without authorization


中文分词工具
1、Jieba(重点),三种分词模式与自定义词典功能
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
https://www.jianshu.com/p/9d232e4a3c28

主要内容:

       利用给定的中英文文本序列(见 Chinese.txt 和 English.txt),分别利用以下给定的中 英文分词工具进行分词并对不同分词工具产生的结果进行简要对比分析。

一、在python环境中安装好各种工具包:

主要利用到pip命令,一般都能快速成功安装。其中有几个需注意的地方:

(1)第一是Stanfordcorenlp的安装过程中:

       首先要配置好java环境,下载安装1.8版本以上的JDK;配置好Java的环境变量Path和java_home等,需要注意最好重启让系统环境变量生效;否则可能遇到如下报错:


image.png

       而后需要下载外接文件包,注意python的版本下载对应的包,而后进行解压,对中文进行处理时需要再另外下载一个对应的Chinese的jar包,放入之前的解压文件夹中。

(2)第二是spacy安装的过程中,可能会遇到权限不够的提示,

方法1是:要用管理员模式启动命令行
方法2是:用 nlp = spacy.load('en_core_web_sm')代替原来的nlp = spacy.load(’en’)

(3)第三是注意文字编码:

有些工具包需要指定为Unicode的编码模式,不然可能会有一些问题。

二、编写代码运行测试:

# -*- 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)    

"""
测试工具包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))

"""
测试工具包SnowNLP
"""
print(">>>>>SnowNLP tokenization start...")
start = time.process_time()
s = SnowNLP(document)
result = s.words                    # [u'这个', u'东西', u'真心',
elapsed = (time.process_time() - start)
print("SnowNLP Time used:",elapsed)
print("《《SnowNLP》》: \n" + "/ ".join(result))                        #  u'很', u'赞']
#result = s.tags          # [(u'这个', 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'「繁體字」「繁體中文」的叫法在臺灣亦很常見。')
#
#s.han           # u'「繁体字」「繁体中文」的叫法
#                # 在台湾亦很常见。'
"""
测试thulac工具包
"""
print(">>>>>thulac tokenization start...")
start = time.process_time()
thu1 = thulac.thulac(seg_only=True)  #默认模式
text = thu1.cut(document, text=True)  #进行一句话分词
elapsed = (time.process_time() - start)
print("thulac Time used:",elapsed)
print("《《thulac》》: \n" + "/ ".join(text))    
#thu1 = thulac.thulac(seg_only=True)  #只进行分词,不进行词性标注
#thu1.cut_f("Chinese.txt", "output.txt")  #对input.txt文件内容进行分词,输出到output.txt

"""
测试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:是否進行詞性標註 
pos_names:顯示詞性的父類(parent)還是子類(child) 或者全部(all) 
pos_english:詞性顯示英語還是中文
获取关键词:pynlpir.get_key_words(s, max_words=50, weighted=False) 
s: 句子 
max_words:最大的關鍵詞數 
weighted:是否顯示關鍵詞的權重
"""
"""
测试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.

部分结果展示:

result

result
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271