我是自然语言处理的新手,我想用它来编写新闻聚合器(在我的案例中是Node.js)。我不是只使用预包装框架,而是想学习螺母和螺栓,我从NLP部分开始。我发现这个教程到目前为止最有帮助:
http://www.p-value.info/2012/12/howto-build-news-aggregator-in-100-loc.html
在其中,作者获取RSS提要并通过它们循环查找元素(或字段)title
和description
。我了解Python并理解代码。但是我不明白的是NLP在这里做了什么title
和description
(除了抓取和标记之外,这很明显......而且那些任务不需要NLP)
import feedparser
import nltk
corpus = []
titles=[]
ct = -1
for feed in feeds:
d = feedparser.parse(feed)
for e in d['entries']:
words = nltk.wordpunct_tokenize(nltk.clean_html(e['description']))
words.extend(nltk.wordpunct_tokenize(e['title']))
lowerwords=[x.lower() for x in words if len(x) > 1]
ct += 1
print ct, "TITLE",e['title']
corpus.append(lowerwords)
titles.append(e['title'])
答案 0 :(得分:1)
(更仔细地阅读你的问题也许这对你来说已经很明显了,但它看起来不像是更深刻或有趣的事情)
wordpunct_tokenize
在此here(最后一行)设置为
wordpunct_tokenize = WordPunctTokenizer().tokenize
此代码WordPunctTokenizer为implemented:
class WordPunctTokenizer(RegexpTokenizer):
def __init__(self):
RegexpTokenizer.__init__(self, r'\w+|[^\w\s]+')
这的核心只是正则表达式r'\w+|[^\w\s]+'
,它定义了此标记生成器将哪些字符串视为标记。有两个选项,由|
分隔:
\w+
,即多个“字”字符(字母或数字)[^\w\s]+
,多个字符不是“单词”字符或空格,因此匹配任何标点字符串Here is a reference用于Python正则表达式。
我没有挖到RegexpTokenizer,但我假设设置为tokenize
函数返回一个迭代器,它在字符串中搜索正则表达式的第一个匹配,然后搜索下一个等等。