我很好奇是否存在一种算法/方法可以通过使用一些权重计算、出现率或其他工具从给定文本生成关键字/标签。
此外,如果您为此指出任何基于 Python 的解决方案/库,我将不胜感激。
Thanks
实现此目的的一种方法是提取文档中出现频率比您预期的偶然出现频率更高的单词。例如,在更大的文档集合中,几乎从未见过术语“马尔可夫”。然而,在同一集合的特定文档中,马尔可夫出现得非常频繁。这表明马尔可夫可能是与文档关联的良好关键字或标签。
要识别这样的关键字,您可以使用逐点互信息 http://en.wikipedia.org/wiki/Pointwise_mutual_information关键字和文档的关系。这是由下式给出的PMI(term, doc) = log [ P(term, doc) / (P(term)*P(doc)) ]
。这将粗略地告诉您,与在更大的集合中遇到该术语相比,您在特定文档中遇到该术语的惊讶程度有多少(或更多)。
要确定与文档关联的 5 个最佳关键字,您只需按术语在文档中的 PMI 分数对术语进行排序,然后选择分数最高的 5 个。
如果你想提取多字标签,请参阅 StackOverflow 问题如何从一系列文本条目中提取常见/重要短语 https://stackoverflow.com/questions/2452982/how-to-extract-common-significant-phrases-from-a-series-of-text-entries.
借用我对这个问题的回答,NLTK 搭配指南 http://www.nltk.org/howto/collocations.html涵盖如何做
使用 n-gram PMI 在大约 7 行代码中提取有趣的多词表达式,例如:
import nltk
from nltk.collocations import *
bigram_measures = nltk.collocations.BigramAssocMeasures()
# change this to read in your data
finder = BigramCollocationFinder.from_words(
nltk.corpus.genesis.words('english-web.txt'))
# only bigrams that appear 3+ times
finder.apply_freq_filter(3)
# return the 5 n-grams with the highest PMI
finder.nbest(bigram_measures.pmi, 5)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)