pyhanlp实现的分词器有很多,同时pyhanlp获取hanlp中分词器也有两种方式
第一种是直接从封装好的hanlp类中获取,这种获取方式一共可以获取五种分词器,而现在默认的就是第一种维特比分词器
1.维特比 (viterbi):效率和效果的最佳平衡。也是最短路分词,HanLP最短路求解采用Viterbi算法
2.双数组trie树 (dat):极速词典分词,千万字符每秒(可能无法获取词性,此处取决于你的词典)
3.条件随机场 (crf):分词、词性标注与命名实体识别精度都较高,适合要求较高的NLP任务
4.感知机 (perceptron):分词、词性标注与命名实体识别,支持在线学习
5.N最短路 (nshort):命名实体识别稍微好一些,牺牲了速度
第二种方式是使用JClass直接获取java类,然后使用。这种方式除了获取上面的五种分词器以外还可以获得一些其他分词器,如NLP分词器,索引分词,快速词典分词等等
两种使用方式的对比
第一种是使用作者给的HanLP直接获取分词器,直接segment() 会获取 默认的标准分词器也就是维特比分词器,也**可以使用newSegment函数,传入上面的分词器英文名称来获取新的分词器,如使用HanLP.newSegment("crf")来获取CRF分词器。**第二种方式是使用JClass从java中获取我们想要的类,好在这两种方式都比较方便。除此之外要注意的是,在pyhanlp中还给出了SafeJClass类,其为JClass的线程安全版,你也可以使用SafeClass来代替JClass。不过好在HanLP中的很多类本身已经实现了线程安全,因此许多时候两者是可以相互替代的。
[你好/vl, ,/w, 欢迎/v, 使用/v, HanLP/nx, 汉语/gi, 处理/vn, 包/v, !/w, 接下来/vl, 请/v, 从/p, 其他/rzv, Demo/nx, 中/f, 体验/v, HanLP/nx, 丰富/a, 的/ude1, 功能/n, ~/nx]
# 标准分词
text = (
"举办纪念活动铭记二战历史,不忘战争带给人类的深重灾难,是为了防止悲剧重演,确保和平永驻;记二战历史,更是为了提醒国际社会,需要共同捍卫二战胜利成果和国际公平正义,必须警惕和抵制在历史认知和维护战后国际秩序问题上的倒行逆施。"
)
BasicTokenizer = JClass("com.hankcs.hanlp.tokenizer.BasicTokenizer")
print(BasicTokenizer.segment(text))
import time
start = time.time()
for i in range(100000):
HanLP.segment(text)
cost_time = time.time() - start
print("HanLP.segment :%.2f字每秒" % (len(text) * 100000 / cost_time))
start = time.time()
for i in range(100000):
BasicTokenizer.segment(text)
cost_time = time.time() - start
print("BasicTokenizer.segment :%.2f字每秒" % (len(text) * 100000 / cost_time))
[举办/v, 纪念活动/nz, 铭记/v, 二战/n, 历史/n, ,/w, 不忘/v, 战争/n, 带给/v, 人类/n, 的/ude1, 深重/a, 灾难/n, ,/w, 是/vshi, 为了/p, 防止/v, 悲剧/n, 重演/v, ,/w, 确保/v, 和平/n, 永驻/nz, ;/w, 记/v, 二战/n, 历史/n, ,/w, 更是/d, 为了/p, 提醒/v, 国际/n, 社会/n, ,/w, 需要/v, 共同/d, 捍卫/v, 二战/n, 胜利/vn, 成果/n, 和/cc, 国际/n, 公平/a, 正义/n, ,/w, 必须/d, 警惕/v, 和/cc, 抵制/v, 在/p, 历史/n, 认知/vn, 和/cc, 维护/v, 战后/t, 国际/n, 秩序/n, 问题/n, 上/f, 的/ude1, 倒行逆施/vl, 。/w]
HanLP.segment :1518389.32字每秒
BasicTokenizer.segment :2415039.64字每秒
仅仅从刚刚的结果看,可能会不太理解为同一个分词器性能差距这么大?难道是因为中间代码的调度问题,其实也不是。将两段代码前后互换之后,发现无论两者怎么排列,总是在前的速度较慢,在后的较快,因此应该是内存的问题,第二次调用时减少了部分内存的调动。所以同一个分词器才会出现,第二次总比第一次快的现象。
标准分词
说明
1.HanLP中有一系列“开箱即用”的静态分词器,以Tokenizer结尾,在接下来的例子中会继续介绍。
2.HanLP.segment其实是对StandardTokenizer.segment的包装。
3.分词结果包含词性,每个词性的意思请查阅《HanLP词性标注集》。
算法详解
1.《词图的生成》
单独获取词性或者词语
如你所见的是,前面print的结果是[词语/词性,词语/词性,/词语/词性…]的形式,那么如果我们只想获取词语,或者词性应该怎么办呢?
方法也很简单。使用HanLP.Config.ShowTermNature = False修改配置,使其不显示词性即可。
如果想要只获取词性也是可以的,因为原分词器返回的是Java中的ArrayList属性,list中的每个单元都是一个term类,因此我们也可以通过获取term中的word字段来直接获取词语,或者nature属性,直接获取词性。这一特征,我们在之后也会用到。
因为HanLP中是默认开启词性标注的,所以在这里我取名为分词与词性标注,但是因为篇幅原因这里没有对词性标注作过多解释,详细内容请看“词性标注(正篇)”
作者:Font Tian
原文:https://blog.csdn.net/FontThrone/article/details/82792377
相关推荐
pyhanlp:HanLP1.x的Python接口 的Python接口,支持自动下载和升级 ,兼容py2,py3。...中文分词 使用命令hanlp segment进入交互分词模式,输入一个句子并回车, 会输出分词结果: $ hanlp segment 商品和服务
本文将深入探讨Python库pyhanlp-0.1.32,它是一个连接Python与Java HanLP的桥梁,为Python开发者提供了强大的中文分词、词性标注、命名实体识别等NLP功能。 首先,我们要理解pyhanlp的核心作用。它是Python对Java ...
2. **词性标注**:在分词的基础上,pyhanlp可以为每个词汇赋予对应的词性,如名词、动词、形容词等,这对于语义理解和信息提取至关重要。 3. **命名实体识别**:pyhanlp能够识别出文本中的专有名词,如人名、地名、...
在Python版本的pyhanlp中,我们可以找到许多与NLP相关的功能,如分词、词性标注、命名实体识别、依存句法分析、关键词提取等。 分词是NLP的基础,它将连续的文本切割成具有语义意义的单位——词语。pyhanlp提供了...
功能:中文分词 词性标注 命名实体识别 依存句法分析 关键词提取新词发现 短语提取 自动摘要 文本分类 拼音简繁 中文分词只是第一步;HanLP从中文分词开始,覆盖词性标注、命名实体识别、句法分析、文本分类等常用...
PyHanLP,作为Java版HanLP的Python接口,为Python开发者提供了强大的中文分词、词性标注、命名实体识别等NLP功能。本文将深入探讨".hanlp.zip"压缩包中的模型文件,并讨论其在实际应用中的重要性和使用方法。 首先...
print(analyzer.analyze(text)) # 分词+词性标注 return tagger ``` **结果**:新华/nt 社/v 北京/v 5 月/v 29 日/v 电/v (/v 记者/v 严赋憬/v 、/v 杨淑君/v )/v 记者/v 从/v 国家/v 林草局/v 获悉/v ,/v ...
对于中文文本,准确的分词是进行后续分析的基础,例如词性标注、命名实体识别等。 2. **词性标注**:词性标注是NLP中的关键步骤,HanLP提供了丰富的词性标签,能够帮助理解和解析文本的语法结构。 3. **命名实体...
HanLP是由北京大学计算机科学技术研究所开发的自然语言处理库,提供了分词、词性标注、命名实体识别、依存句法分析、语义角色标注等丰富的功能,是NLP领域广泛使用的工具之一。 在学习和使用Python进行NLP时,通常...
2. 对问题抽象并提取关键词(pyhanlp模块分词和词性标注,其实我认为如果求简的话,这里可以用jieba替代) 3. 对抽象问句分类得到对应的模板(scikit-learn模块的朴素贝叶斯算法) 4. 根据模板规则到Neo4j数据库中...