Open JiaxiangBU opened 4 years ago
获得关键词或者短语确实可以是一个很实用的新功能。
特别对于HarvestText来说:
不过目前我本人可能还不能抽出太多时间去实现这个功能,可以作为一个enhancement留到以后做。如果你有空的话,也欢迎贡献力量。
考虑实现的方案是提供一个通用的关键词抽取的函数,比如叫ht.extract_keywords
,其中除了topicrank
,也可以支持更简单的tfidf
(从提供的语料统计或使用jieba的统计), textrank
(关键词部分),便于对比挑选,可以在CSL之类的关键词抽取数据集上评测一下效果。
@blmoistawinde
获得关键词或者短语确实可以是一个很实用的新功能。
特别对于HarvestText来说:
- 若已有实体别名信息,就可以借用现有的实体消歧的框架合并实体的不同指称,期望或许能够提升一些精度或者减少一些冗余。
- 若没有已知实体,也可以作为NER、新词发现外的挖掘关键实体的一种手段。
不过目前我本人可能还不能抽出太多时间去实现这个功能,可以作为一个enhancement留到以后做。如果你有空的话,也欢迎贡献力量。
好的,我和我的小伙伴 @gaowenxin95 先研究下 HarvestText 框架,再考虑下这个算法的实现。
考虑实现的方案是提供一个通用的关键词抽取的函数,比如叫
ht.extract_keywords
,其中除了topicrank
,也可以支持更简单的tfidf
(从提供的语料统计或使用jieba的统计),textrank
(关键词部分),便于对比挑选,
我觉得OK的,设置一个 model
,方便用户调用即可。
可以在CSL之类的关键词抽取数据集上评测一下效果。
好的,实现后,到时候看下效果。
新版初步实现了这个接口,并评测了算法表现,目前仅提供tfidf和textrank
目前提供包括textrank
和HarvestText封装jieba并配置好参数和停用词的jieba_tfidf
(默认)两种算法。
示例(完整见example):
# text为林俊杰《关键词》歌词
print("《关键词》里的关键词")
kwds = ht.extract_keywords(text, 5, method="jieba_tfidf")
print("jieba_tfidf", kwds)
kwds = ht.extract_keywords(text, 5, method="textrank")
print("textrank", kwds)
《关键词》里的关键词
jieba_tfidf ['自私', '慷慨', '落叶', '消逝', '故事']
textrank ['自私', '落叶', '慷慨', '故事', '位置']
CSL.ipynb提供了不同算法,以及本库的实现与textrank4zh的在CSL数据集上的比较。由于仅有一个数据集且数据集对于以上算法都很不友好,表现仅供参考。
算法 | P@5 | R@5 | F@5 |
---|---|---|---|
textrank4zh | 0.0836 | 0.1174 | 0.0977 |
ht_textrank | 0.0955 | 0.1342 | 0.1116 |
ht_jieba_tfidf | 0.1035 | 0.1453 | 0.1209 |
描述你想要的功能 能够提供具体例子更好
TextRank 得到的是摘要性的句子而非短语,TopicRank 可以实现这一点,这算一个新功能。 而且从 paper 的对比试验来看,短语抽取是比 TextRank 会更高些(作者对比可英文和法语)。
是否有自己想过的可能解决方案?
其实有解决方案了,见 pke,但是这个包实在是太多 bug 了
ZeroDivisionError: float division by zero
,这里gap
不做极端例子的处理,self.graph[i][j]['weight'] += 1.0 / gap
。其他想说的
也想看看项目开发者的想法,比如这个需求有没有必要做。