识别文本中的重要词汇和短语
我在一个Python字符串里存了一些文本。
我想要做的事情
- 找出文本中的关键词。
- 找出文本中的N-grams(最好能找到比二元组和三元组更多的组合)。
请记住……
- 文本可能很小(比如一条推文的大小)
- 文本可能中等(比如一篇新闻文章的大小)
- 文本可能很大(比如一本书或一个章节的大小)
我现在有的
我已经在使用nltk来把文本分割成小块,并去掉一些常见的无意义词:
# split across any non-word character
tokenizer = nltk.tokenize.RegexpTokenizer('[^\w\']+', gaps=True)
# tokenize
tokens = tokenizer.tokenize(text)
# remove stopwords
tokens = [w for w in tokens if not w in nltk.corpus.stopwords.words('english')]
我知道有BigramCollocationFinder和TrigramCollectionFinder这两个工具,正好可以满足我对这两种情况的需求。
我的问题
我需要一些建议,关于如何找到更高阶的N-grams,如何改进BCF和TCF的结果,以及如何找到最独特的关键词的最佳方法。
非常感谢!
1 个回答
2
要找出最独特的关键词,最好的方法就是使用tfidf这个指标。简单来说,你需要整合一个搜索引擎,或者制作一个简单的动态倒排索引,这样才能高效地计算tfidf。
至于你的N-grams,为什么不试着用“窗口”方法创建一个自定义解析器呢?这里的“窗口”就是指长度为N的一个小段,这样可以找出最常见的N-grams。你可以把每个N-gram当作字典里的一个键,值可以是它出现的频率,或者是根据每个词的tfidf计算出的分数。