首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TfIdfVectorizer未正确标记

TfIdfVectorizer未正确标记
EN

Stack Overflow用户
提问于 2019-11-28 21:09:58
回答 1查看 1.4K关注 0票数 2

就我而言,这是毫无疑问的。我正在Kaggle从事一个NLP和情感分析项目,首先,我正在准备我的数据。dataframe是一个文本列,后面跟着一个从0到9的数字,它对行(文档)所属的集群进行了分类。我在雪橇上使用TF-以色列国防军越野器。我想去掉任何不是英语单词的东西,所以我使用以下方法:

代码语言:javascript
复制
class LemmaTokenizer(object):
    def __init__(self):
        self.wnl = WordNetLemmatizer()
    def __call__(self, doc):
        return [self.wnl.lemmatize(t) for t in word_tokenize(doc)]

s_words = list(nltk.corpus.stopwords.words("english"))

c = TfidfVectorizer(sublinear_tf=False,
                    stop_words=s_words,
                    token_pattern =r"(?ui)\\b\\w*[a-z]+\\w*\\b",
                    tokenizer = LemmaTokenizer(),
                    analyzer = "word",
                    strip_accents = "unicode")

#a_df is the original dataframe
X = a_df['Text']
X_text = c.fit_transform(X)

据我所知,当调用c.get_feature_names()时,应该只返回正确的标记,而不是数字或标点符号。我在StackOverflow中的一篇文章中找到了正则表达式,但是使用像[a-zA-Z]+这样更简单的regex就可以完成完全相同的任务(这是没有的)。当我调用特征名时,我会得到如下内容

代码语言:javascript
复制
["''abalone",
"#",
"?",
"$",
"'",
"'0",
"'01",
"'accidentally",
...]

这些只是例子,但它代表了我得到的输出,而不仅仅是单词。几天来,我一直在尝试不同的正则表达式或方法来调用它。甚至硬编码一些输出的特征上的停止词。我之所以这样问,是因为后来我使用LDA获取每个集群的主题,并将标点符号作为“主题”。我希望我不是在复制另一篇文章。更多的信息,我需要提供会很高兴。提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-28 21:23:10

如果传递自定义令牌程序,regex模式将被忽略。这一点在文档中没有提到,但是您可以在这里的源代码中清楚地看到:

https://github.com/scikit-learn/scikit-learn/blob/9e5819aa413ce907134ee5704abba43ad8a61827/sklearn/feature_extraction/text.py#L333

代码语言:javascript
复制
def build_tokenizer(self):
    """Return a function that splits a string into a sequence of tokens.
    Returns
    -------
    tokenizer: callable
          A function to split a string into a sequence of tokens.
    """
    if self.tokenizer is not None:
        return self.tokenizer
    token_pattern = re.compile(self.token_pattern)
    return token_pattern.findall

如果self.tokenizer不是None,则不会使用令牌模式进行任何操作。

解决这个问题很简单,只需将regex令牌模式放在自定义令牌程序中,然后使用它来选择令牌。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59096174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档