用HarvestText自动识别实体及人物别名,用于实体链接分析
可以在这里找到本文对应的Jupyter Notebook.
要运行这个例子,需要更新HarvestText到V0.7及以上版本
pip install --upgrade harvesttext
并且,在这里下载数据集,放到与本文件同一路径下。
from harvesttext import HarvestText
ht = HarvestText()
数据预览
with open("all_comments.txt", encoding="utf-8") as f:
for i, line in enumerate(f):
if i >= 10:
break
print(f"{i}: {line}")
0: 特神牛逼
1: 请教下,叶尔凡去了哪里?也不见替补哇
2: 下场上!
3: 11号请在东看台26区找我不见不散!//<a href="https://home.zhibo8.cc/user.html?platform=mobile&uid=3348048">@江苏苏宁俱乐部</a>:下场上!
4: 这场看了20分钟就走了。还好是免费的![笑哭]
5: 心疼我的筱婷
6: 卡佩罗牛逼,敢上三个U23球员!为你****🐮
7: 恭喜特谢拉加入“我奶奶都能进”系列[滑稽][捂脸]
8: 视频裁判这么好用居然还有人喷,减少很多争议。耗时间只是刚开始不够专业需要时间来优化。
9: 就算耗时间得到公正判罚也值得了。
可以看到,这里的数据有以下特点:
- 包含了许多原始的网络格式。如HTML,还有@和转发等格式。在处理时保留这些东西可能会导致不鲁棒的程序崩溃,或者挖掘出一些无关实体的副作用,所以需要合理的文本清洗。
- 网络语言的不正规特点,导致对于同一个对象会有不同的称谓,如示例中的“特神”就是球员“特谢拉”的别名。如果要针对实体进行分析,必须要进行规整。
处理1需要文本清洗,处理2需要挖掘出人物别名,HarvestText提供了能够方便处理这些问题的接口:
文本清洗
ht.clean_text的默认配置就可以处理这类评论和微博类的数据:
sample = '11号请在东看台26区找我不见不散!//<a href="https://home.zhibo8.cc/user.html?platform=mobile&uid=3348048">@江苏苏宁俱乐部</a>:下场上!'
print(ht.clean_text(sample))
11号请在东看台26区找我不见不散! 下场上!
上面的例子就演示了去除HTML代码,以及回复其他用户的特殊格式"//@user",这些信息一般是无用的干扰信息。
函数还提供了更多其他参数,来处理包括:网址;email;html代码中的 一类的特殊字符;网址内的%20一类的特殊字符等问题,可以使用help方法来看函数的注释,以及参照