自然语言处理中的中英文分词工具

  • jieba中文分词
    • jieba库的安装
    • jieba的基本功能
    • jieba运用实例
  • nltk英文分词
    • nltk及nltk_data的安装
    • nltk的基本功能
    • nltk运用实例
  • 总结

分词是自然语言处理的基础,分词的准确度直接决定了后面的词性标注、句法分析、词向量以及文本分析的质量。英文语句使用空格将单词进行分隔,除了某些特定词,如New York等。但中文不同,天然缺少分隔符,需要自行分词和断句。
目前,中文常用的分词工具有jieba“结巴”中文分词、哈工大LTP等;英文常用的分词工具有nltk等。

jieba中文分词

jieba 是目前最好的 Python 中文分词组件,它主要有三种分词模式:精确模式、全模式、搜索引擎模式。

jieba库官方文档链接: https://github.com/fxsjy/jieba.

jieba库的安装

  1. 全自动模式:easy_install jieba 或者 pip install jieba / pip3 install jieba
  2. 半自动模式:先下载 http://pypi.python.org/pypi/jieba/ ,解压后运行 python setup.py install

jieba的基本功能

1. 分词
其中主要有三种分词模式,各自功能如下:
(1)精确模式:试图将句子最精确地切开,适合文本分析
(2)全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义,且存在一些冗余数据
(3)搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词

import jiebaseg_str = "请问同济大学在哪里"#精简模式
print(" ".join(jieba.lcut(seg_str)))
#全模式
print(" ".join(jieba.lcut(seg_str, cut_all=True)))
#搜索引擎模式
print(" ".join(jieba.lcut_for_search(seg_str)))

分词后的句子依次为:

请问 同济大学 在 哪里
请问 同济 同济大学 大学 在 哪里
请问 同济 大学 同济大学 在 哪里

2. 词性标注
jieba.posseg.dt 为默认词性标注分词器。

import jieba.posseg as pseg words=pseg.cut("请问同济大学在哪里")#词性标注
for word ,flag in words:print ('%s %s' %(word,flag))

词性标注后的结果为:

请问 v
同济大学 nt
在 p
哪里 r

3. 加载自定义词典及调节词频

(1)jieba.load_userdict(file_name) :其中file_name 为文件类对象或自定义词典的路径。词典格式:每行分为词语、词频(可省略)、词性(可省略)三部分,用空格隔开。
下面为词典实例:

同济大学 100 n
云计算 5

(2)suggest_freq(segment, tune=True) :调节单个词语的词频,使其能(或不能)被分出来。

import jieba
words =jieba.cut("请问同济大学在哪里",HMM=False)
jieba.suggest_freq(('在哪里'),True)#不划分“在”和“哪里”
print(' '.join(words))

运行结果为:

请问 同济大学 在哪里

jieba运用实例

利用下面的文字进行词频统计:

6月12日凌晨0点,周杰伦最新单曲正式上线,仅上线1小时销售量就超过百万张,预计今天这首单曲的销量仍然会继续攀升。这次新歌的歌名叫做《Mojito》,翻译成中文是莫吉托,一种巴西鸡尾酒,怪不得观看这首歌MV的时候,感受到一股很浓烈的异域风情呢。

在分词前首先去掉里面包含的数字和符号,以避免对统计的影响,采用的是精确模式下的分词。

import jieba
import re
from collections import Countercut_words=""
for line in open('word.txt',encoding='utf-8'):line.strip('\n')line = re.sub("[A-Za-z0-9\:\·\—\,\。\“ \”]", "", line)#去除标点符号和数字seg_list=jieba.cut(line,cut_all=False)cut_words+=(" ".join(seg_list))
all_words=cut_words.split()count=Counter()
for x in all_words:#统计词频if len(x)>=1 and x != '\r\n':count[x] += 1for (k,v) in count.most_common(2):# 输出词频最高的前两个词print("%s:%d"%(k,v))

最终统计结果为:

的:4
单曲:2

nltk英文分词

nltk是情感分析、文本相似度、文本分类等自然语言处理中的经典应用。
nltk的官方文档链接为:http://www.nltk.org/.

nltk及nltk_data的安装

nltk的安装与jieba类似:

  1. 全自动模式:pip install nltk / pip3 install nltk
  2. 半自动模式:先下载 http://pypi.python.org/pypi/nltk/ ,解压后运行 python setup.py install

nltk_data中集成了语料与模型等的包管理器,官方文档所介绍安装操作为:命令行输入python后进入交互页面,依次输入import python及nltk.download()即可下载。但我实际操作时一直卡在download界面,对于这种情况的解决方案是:
在 https://github.com/nltk/nltk_data/tree/gh-pages下载nltk_data压缩包,解压后放入python文件夹内即可。

nltk的基本功能

1. 分词
nltk.sent_tokenize(text):按句子进行分割
nltk.word_tokenize(sentence):按词语进行分割

import nltk#按句子分割
sents = nltk.sent_tokenize("How are you? Wish you have a good day!")
word = []
for sent in sents:word.append(nltk.word_tokenize(sent))
print(word)#按单词分割
text = nltk.word_tokenize("wish you have a good day!")
print(text)

运行结果:

[['How', 'are', 'you', '?'], ['Wish', 'you', 'have', 'a', 'good', 'day', '!']]
['wish', 'you', 'have', 'a', 'good', 'day', '!']

2. 词性标注
nltk.pos_tag(list):将句子按词分割后进行标注词性

import nltkdocument = 'wish you have a good day'
sentences = nltk.sent_tokenize(document)
for sent in sentences:print(nltk.pos_tag(nltk.word_tokenize(sent)))

标注结果为:

[('wish', 'NN'), ('you', 'PRP'), ('have', 'VBP'), ('a', 'DT'), ('good', 'JJ'), ('day', 'NN')]

3. 去除停用词
去除类似the,a,of等语义无价值的词,其中可选语言种类。

from nltk.corpus import stopwordsfiltered_words = [word for word in word_list if word not in stopwords.words('english')]

nltk运用实例

利用nltk实现朴素贝叶斯分类器,其中数据选择的是nltk_data/corpus中的电影评论数据集,数据集中分为"pos"和"neg"两个类别,通过分类器判断评论的类别。

import nltk
import random
from nltk.corpus import movie_reviewsdocuments = [(list(movie_reviews.words(fileid)),category) for category in movie_reviews.categories() for fileid in movie_reviews.fileids(category)]
random.shuffle(documents)#划分训练和测试数据
features = [(document_features(d),c)for (d,c) in documents]
train_data,test_data = features[100:],features[:100]#朴素贝叶斯测试准确率
classifier = nltk.NaiveBayesClassifier.train(train_data)
print(nltk.classify.accuracy(classifier,test_data))

测试出的准确率为:

0.48

总结

以上是对中英文分词工具的基础学习,更多功能以及在自然语言处理领域的应用在之后的学习中进行补充。

自然语言处理中的中英文分词工具相关推荐

  1. Jieba、NLTK等中英文分词工具进行分词

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

  2. jieba nltk 进行中英文分词

    Jieba.NLTK等中英文分词工具进行分词 建议:中文分词使用 jieba(SnowNlp.THULAC.NLPIR.StanfordCoreNLP)进行分词,英文使用 NLTK进行分词:还有git ...

  3. 自然语言处理中的分词问题总结

    自然语言处理中的分词问题总结 众所周知,英文是以词为单位的,词和词之间是靠空格隔开,而中文是以字为单位,句子中所有的字连起来才能描述一个意思.把中文的汉字序列切分成有意义的词,就是中文分词,有些人也称 ...

  4. 自然语言处理中文本的token和tokenization

    自然语言处理中文本的token和tokenization 1.1 概念和工具的介绍 tokenization就是通常所说的分词,分出的每一个词语我们把它称为token. 常见的分词工具很多,比如: j ...

  5. 北京大学开源分词工具pkuseg 初试与使用感受

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/meiqi0538/article/de ...

  6. 自然语言处理中的预训练技术发展史

    公众号关注 "视学算法" 设为 "星标",重磅干货,第一时间送达! 本文作者:张俊林 https://zhuanlan.zhihu.com/p/49271699 ...

  7. 自然语言处理中的N-Gram模型

    N-Gram(有时也称为N元模型)是自然语言处理中一个非常重要的概念,通常在NLP中,人们基于一定的语料库,可以利用N-Gram来预计或者评估一个句子是否合理.另外一方面,N-Gram的另外一个作用是 ...

  8. 【技术综述】深度学习在自然语言处理中的应用发展史

    本篇介绍深度学习在自然语言处理(NLP)中的应用,从词向量开始,到最新最强大的BERT等预训练模型,梗概性的介绍了深度学习近20年在NLP中的一些重大的进展. 作者&编辑 | 小Dream哥 ...

  9. 自然语言处理中的模式(模式1.概率化模式)

    /* 版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/ 自然语言处理中的模式(模式1.概率化模式) CopyMiddle: 张俊林                         ...

  10. ik分词和jieba分词哪个好_Pubseg:一种单双字串的BiLSTM中文分词工具

    中文分词是中文自然语言处理中的重要的步骤,有一个更高精度的中文分词模型会显著提升文档分类.情感预测.社交媒体处理等任务的效果[1]. Pubseg是基于BiLSTM中文分词工具,基于ICWS2005P ...

最新文章

  1. Go语言开发常见陷阱,你遇到过几个?
  2. Python基础4_列表,元祖
  3. python课程与c+课程有什么不同-大一选编程课是选Python还是c?
  4. Python之dict(或对象)与json之间的互相转化
  5. NC7-买卖股票的最好时机
  6. 滑动轮播_这样运营轮播图可以增加订单
  7. Android之解决toolbar里面显示返回按钮图片太大和没有水平居中的问题
  8. 有了JSON.stringify(),处理json将变得更简单!!
  9. eclipse中对单独JS文件取消报错的处理
  10. PHP 的魔术方法及其应用
  11. C++ 类使用规范建议
  12. BZOJ1066: [SCOI2007]蜥蜴
  13. 金蝶kis专业版 服务器系统,金蝶kis专业版服务器设置
  14. 腾讯开源|TAT Agent-助力轻松完成云服务器运维管理任务
  15. MySQL Cluster 集群部署
  16. JavaScript名词解释
  17. JO Smart聚视频 TV端软件
  18. linux查看usb设备文件,技术|在 Linux 系统里识别 USB 设备名字的 4 种方法
  19. SwiftUI的多列列表
  20. Kibana:Kibana Query Language - KQL

热门文章

  1. matlab正方形追及问题,行测常考题型讲解:环形相遇与追及问题
  2. ubuntu20.04中安装划词翻译_支持语音录入翻译的小爱同学鼠标让智能设备控制一手掌握...
  3. 转 vo、po、dto、bo、pojo、entity、mode如何区分
  4. 选择与循环:剪刀石头布_剪刀石头布十大奢侈家具,创造高端精致生活就是这么简单!...
  5. 微信小程序动态更改标题栏_微信小程序动态改变导航栏标题和背景颜色
  6. UPC-5094 - Faulty Robot - 搜索
  7. '命名空间xxx中不存在类型或命名空间名xx(是否缺少程序集引用)'-异常报错的原因
  8. “乌龙学院”的是是非非
  9. PAT乙级1050 螺旋矩阵
  10. 红帽linux9 iso,RedHat Linux9.0 ISO 原版下载