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)
小智 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,因为我自己只做了一个月左右,但可能会有帮助!
我认为你正在寻找的是chunking。我建议阅读NLTK 书的第 7 章或者我自己关于块提取的文章。这两者都假设您了解词性标记,这将在第 5 章中介绍。
| 归档时间: |
|
| 查看次数: |
50955 次 |
| 最近记录: |