如何修复 scikit-learn 中的令牌模式?

Posted

技术标签:

【中文标题】如何修复 scikit-learn 中的令牌模式?【英文标题】:How to fix token pattern in scikit-learn? 【发布时间】:2015-04-12 16:05:22 【问题描述】:

我正在使用 scikit-learn 中的 TfidfVectorizer 来提取特征, 设置如下:

def tokenize(text):
    tokens = nltk.word_tokenize(text)
    stems = []
    for token in tokens:
        token = re.sub("[^a-zA-Z]","", token)
        stems.append(EnglishStemmer().stem(token))
    return stems

vectorizer = TfidfVectorizer(tokenizer=tokenize, lowercase=True, stop_words='english')

将训练集输入向量化器后,我调用

vectorizer.get_feature_names()

输出包含一些带有空格的重复单词:例如

u'', u' ', u' low', u' lower', u'lower', u'lower ', u'lower high', u'lower low'

并且可接受的输出应该是:

u'low', u'lower', u'lower high', u'lower low'

我该如何解决?谢谢。

【问题讨论】:

输入是来自stocktwits.com的一堆推文,其中包含很多俚语 stems 函数中的 tokenize 列表是一个局部变量,每次调用函数时都会产生和消亡。你为什么要费心建立那个清单?它不可能有任何用途。 对不起,我错过了退货声明。 【参考方案1】:

你可以像下面这样,

>>> l = ['lower low', 'lower high','lower ', ' lower', u'lower', ' ', '', 'low']
>>> list(set(i.strip() for i in l if i!=' ' and i))
['lower', 'lower low', 'lower high', 'low']

【讨论】:

那么,不带标点或前导空格的正则表达式是什么? 以上你想做什么?你的预期输出是什么? 我阅读了 sklearn 的指令,也许我可以将 token_pattern 设置为正则表达式。见scikit-learn.org/stable/modules/generated/… 我刚刚回答了这个'如何删除重复项,空字符串'u'', u' ', u' low', u' lower', u'lower', u'lower ', u'lower high', u'lower low'

以上是关于如何修复 scikit-learn 中的令牌模式?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 ESLint 中的意外令牌?

如何修复节点中的“解析错误:意外的令牌 =>”?

执行 scikit-learn 剪影分数时如何修复内存错误?

如何修复“无效的记住我令牌(系列/令牌)不匹配”错误?

如何修复渲染 SLS 失败:Jinja 语法错误:预期令牌',',得到':'?

如何修复 Google 令牌在 7 天后过期