如何从一系列文本输入中提取常用/重要短语
nlp
nltk
text-analysis
4
0

我有一系列文本项-来自MySQL数据库的原始HTML。我想在这些条目中找到最常用的短语(而不是单个最常用的短语,理想情况下,不强制单词对单词的匹配)。

我的示例是Yelp.com上的任何评论,其中以给定餐厅的数百条评论显示了3个摘要,格式为:

“尝试汉堡”(共44条评论)

例如,此页面的“评论重点”部分:

http://www.yelp.com/biz/sushi-gen-los-angeles/

我已经安装了NLTK,并且已经对其进行了一些尝试,但是老实说,这些选择让他们不知所措。这似乎是一个相当普遍的问题,我无法通过在此处搜索找到简单的解决方案。

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

我认为您正在寻找分块 。我建议阅读NLTK书的第7章,或者阅读我自己的关于块提取的文章。这两个都假设了词性标记的知识,这将在第5章介绍

收藏
评论

我怀疑您不只是想要最普通的短语,而是想要最有趣的搭配 。否则,您可能最终会过度表达由普通单词组成的短语,而减少有趣和翔实的短语。

为此,您实际上将需要从数据中提取n元语法,然后找到具有最高点智慧互信息 (PMI)的n元语法。也就是说,您希望找到共同出现的单词,而不是偶然发现的单词。

NLTK搭配使用方法在大约7行代码中涵盖了如何执行此操作,例如:

import nltk
from nltk.collocations import *
bigram_measures = nltk.collocations.BigramAssocMeasures()
trigram_measures = nltk.collocations.TrigramAssocMeasures()

# 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 10 n-grams with the highest PMI
finder.nbest(bigram_measures.pmi, 10)
收藏
评论

如果您只想大于3克,可以尝试一下。我假设您已经剔除了html等所有垃圾

import nltk
ngramlist=[]
raw=<yourtextfile here>

x=1
ngramlimit=6
tokens=nltk.word_tokenize(raw)

while x <= ngramlimit:
  ngramlist.extend(nltk.ngrams(tokens, x))
  x+=1

大概不是很pythonic,因为我自己一个月才做这个,但是可能会有帮助!

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号