python中TfidfVectorizer中n-gram的令牌模式



TfidfVectorizer是否使用python正则表达式识别n-gram?

这个问题是在阅读scikit学习TfidfVectorizer的文档时出现的,我发现在单词级别识别n-gram的模式是token_pattern=u'(?u)bww+b'。我很难理解这是怎么回事。考虑一下bi-gram的情况。如果我这样做:

    In [1]: import re
    In [2]: re.findall(u'(?u)bww+b',u'this is a sentence! this is another one.')
    Out[2]: []

我没有发现任何双关语。鉴于:

    In [2]: re.findall(u'(?u)w+ w*',u'this is a sentence! this is another one.')
    Out[2]: [u'this is', u'a sentence', u'this is', u'another one']

发现一些(但不是全部,例如u'is a'和所有其他偶数双元图丢失)。我在解释b字符函数时做错了什么?

注:根据正则表达式模块文档,re中的b字符应该是:

\b匹配空字符串,但仅在单词的开头或结尾。单词被定义为字母数字或下划线字符的序列,因此单词的末尾由空白或非字母数字、非下划线字符表示。

我看到了一些关于在python中识别n-gram的问题(见1,2),所以第二个问题是:在将文本输入到TfidfVectorizer之前,我应该这样做并添加连接的n-gram吗?

您应该在正则表达式前面加上r。以下工作:

>>> re.findall(r'(?u)bww+b',u'this is a sentence! this is another one.')
[u'this', u'is', u'sentence', u'this', u'is', u'another', u'one']

这是文档中已知的错误,但如果您查看源代码,它们确实使用了原始文字。

相关内容

  • 没有找到相关文章

最新更新