本人的作品,在Github上开源,欢迎大家使用:https://github.com/blmoistawinde/HarvestText
HarvestText
Sow with little data seed, harvest much from a text field.
播撒几多种子词,收获万千领域实
用途
HarvestText是一个专注无(弱)监督方法,能够整合领域知识(如类型,别名)对特定领域文本进行简单高效地处理和分析的库。
具体功能如下:
- 基本处理
- 精细分词分句
- 可包含指定词和类别的分词。充分考虑省略号,双引号等特殊标点的分句。
- 实体链接
- 把别名,缩写与他们的标准名联系起来。
- 命名实体识别
- 找到一句句子中的人名,地名,机构名等命名实体。
- 依存句法分析
- 分析语句中各个词语(包括链接到的实体)的主谓宾语修饰等语法关系,
- 内置资源
- 通用停用词,通用情感词,IT、财经、饮食、法律等领域词典。可直接用于以上任务。
- 信息检索
- 统计特定实体出现的位置,次数等。
- 新词发现
- 利用统计规律(或规则)发现语料中可能会被传统分词遗漏的特殊词汇。也便于从文本中快速筛选出关键词。
- 字符拼音纠错
- 把语句中有可能是已知实体的错误拼写(误差一个字符或拼音)的词语链接到对应实体。
- 存取消除
- 可以本地保存模型再读取复用,也可以消除当前模型的记录。
- 精细分词分句
- 高层应用
使用案例:
- 《三国演义》中的社交网络(实体分词,文本摘要,关系网络等)
- 2018中超舆情展示系统(实体分词,情感分析,新词发现[辅助绰号识别]等)
- 近代史纲要信息抽取及问答系统(命名实体识别,依存句法分析,简易问答系统)
用法
首先安装,
使用pip
pip install harvesttext
或进入setup.py所在目录,然后命令行:
python setup.py install
随后在代码中:
from harvesttext import HarvestText
ht = HarvestText()
即可调用本库的功能接口。
实体链接
给定某些实体及其可能的代称,以及实体对应类型。将其登录到词典中,在分词时优先切分出来,并且以对应类型作为词性。也可以单独获得语料中的所有实体及其位置:
para = "上港的武磊和恒大的郜林,谁是中国最好的前锋?那当然是武磊武球王了,他是射手榜第一,原来是弱点的单刀也有了进步"
entity_mention_dict = {
'武磊':['武磊','武球王'],'郜林':['郜林','郜飞机'],'前锋':['前锋'],'上海上港':['上港'],'广州恒大':['恒大'],'单刀球':['单刀']}
entity_type_dict = {
'武磊':'球员','郜林':'球员','前锋':'位置','上海上港':'球队','广州恒大':'球队','单刀球':'术语'}
ht.add_entities(entity_mention_dict,entity_type_dict)
print("\nSentence segmentation")
print(ht.seg(para,return_sent=True)) # return_sent=False时,则返回词语列表
上港 的 武磊 和 恒大 的 郜林 , 谁 是 中国 最好 的 前锋 ? 那 当然 是 武磊 武球王 了, 他 是 射手榜 第一 , 原来 是 弱点 的 单刀 也 有 了 进步
采用传统的分词工具很容易把“武球王”拆分为“武 球王”
词性标注,包括指定的特殊类型。
print("\nPOS tagging with entity types")
for word, flag in ht.posseg(para):
print("%s:%s" % (word, flag),end = " ")
上港:球队 的:uj 武磊:球员 和:c 恒大:球队 的:uj 郜林:球员 ,:x 谁:r 是:v 中国:ns 最好:a 的:uj 前锋:位置 ?:x 那:r 当然:d 是:v 武磊:球员 武球王:球员 了:ul ,:x 他:r 是:v 射手榜:n 第一:m ,:x 原来:d 是:v 弱点:n 的:uj 单刀:术语 也:d 有:v 了:ul 进步:d
for span, entity in ht.entity_linking(para):
print(span, entity)
[0, 2] (‘上海上港’, ‘#球队#’)
[3, 5] (‘武磊’, ‘#球员#’)
[6, 8] (‘广州恒大’, ‘#球队#’)
[9, 11] (‘郜林’, ‘#球员#’)
[19, 21] (‘前锋’, ‘#位置#’)
[26, 28] (‘武磊’, ‘#球员#’)
[28, 31] (‘武磊’, ‘#球员#’)
[47, 49] (‘单刀球’, ‘#术语#’)
这里把“武球王”转化为了标准指称“武磊”,可以便于标准统一的统计工作。
分句:
pr