如何从一系列文本条目中提取常用/重要短语

arr*_*sky 63 nlp text-extraction text-analysis nltk

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

我的例子是Yelp.com上的任何评论,它显示了来自特定餐厅的数百条评论的3个片段,格式如下:

"尝试汉堡包"(在44条评论中)

例如,本页的"评论亮点"部分:

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

我已经安装了NLTK并且我已经玩了一些,但老实说我被选项所淹没.这似乎是一个相当普遍的问题,我无法通过在这里搜索找到一个简单的解决方案.

dmc*_*cer 88

我怀疑你不只是想要最常用的短语,而是你想要最有趣的搭配.否则,你最终可能会因为常用词汇和较少有趣且信息量较少的短语而过多地表达短语.

为此,您基本上希望从数据中提取n-gram,然后找到具有最高点互信息(PMI)的n-gram .也就是说,你想要找到共同出现的词比你想象的更多.

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)
Run Code Online (Sandbox Code Playgroud)

  • 为此,我认为您需要扩展nltk.collocations.AbstractCollocationFinder,使用BigramCollocationFinder和TrigramCollocationFinder作为指南,请参阅http://nltk.googlecode.com/svn/trunk/doc/api/nltk.collocations-pysrc. HTML.但是,你确定你真的需要这么长的短语吗?在Yelp上,看起来他们突出单个单词和搭配其中的几个单词,在你的链接示例中他们有生鱼片,小东京和鱼.然后他们选择一个包含每个有趣单词或短语的完整句子. (3认同)
  • 这个.我认为你是完全正确的.绚丽(优雅)的观察! (3认同)
  • 是的,我同意-并查看该页面,我可以得到二元和三元语法,但是这如何扩展到n元语法呢?我相信我需要长度大于5的短语才能真正有趣,也许我表达了自己的无知,但是此演示页面仅允许我获得2个和3个单词集? (2认同)

小智 5

如果你只是想获得大于 3 ngrams 的数据,你可以尝试这个。我假设您已经删除了所有垃圾,例如 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
Run Code Online (Sandbox Code Playgroud)

可能不是很Pythonic,因为我自己只做了一个月左右,但可能会有帮助!


Jac*_*cob 5

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

  • 分块可以解析短语,一旦有了短语,就可以识别常见和重要的短语。 (3认同)

Tom*_*vic 0

首先,您可能必须删除所有 HTML 标记(搜索“<[^>]*>”并将其替换为“”)。之后,您可以尝试寻找每两个文本项之间最长公共子串的天真的方法,但我认为您不会得到很好的结果。您可能会通过首先规范化单词(将它们还原为基本形式,删除所有重音符号,将所有内容设置为小写或大写)然后进行分析来做得更好。同样,根据您想要完成的任务,如果允许一定的词序灵活性,您可能能够更好地对文本项进行聚类,即将文本项视为标准化单词包并测量包内容相似性。

我在这里评论了一个类似(尽管不相同)的主题。