sklearn 中的 countvectorizer 仅适用于英语吗?

Posted

技术标签:

【中文标题】sklearn 中的 countvectorizer 仅适用于英语吗?【英文标题】:Is countvectorizer in sklearn only meant for English? 【发布时间】:2020-08-07 04:36:36 【问题描述】:

我正在尝试为印度语言的泰卢固语和印地语应用计数矢量化器。但矢量化器会自动对单词进行词干处理。

count_vect = CountVectorizer()
xv=count_vect.fit_transform(['she is a good girl','वो बहुत सुन्दर है','ఇది చాలా లాడిష్ మరియు బాల్య టీనేజ్ కుర్రాళ్ళు మాత్రమే దీనిని ఫన్నీగా చూడవచ్చు', 'దోపిడీ మరియు ఎక్కువగా లోతు లేదా అధునాతనత లేని నేరాలకు సంబంధించిన గ్రాఫిక్ చికిత్సను చూడటం భరించదగినది'])
count_vect.get_feature_names()

输出如下:

['girl',
 'good',
 'is',
 'she',
 'दर',
 'बह',
 'అధ',
 'ఇద',
 'ఎక',
 'చదగ',
 'డట',
 'డవచ',
 'తనత',
 'నద',
 'ఫన',
 'భర',
 'మర',
 'రమ',
 'లక',
 'వగ',
 'సన']

很明显它会自动阻止泰卢固语和印地语单词,有什么办法可以避免这种情况吗?

【问题讨论】:

【参考方案1】:

CountVectorizer() 使用的分析器似乎严重支持某些编码。您可以定义一个自定义分析器,以定义如何分隔单词。要正确分隔单词,您可以使用正则表达式:

import regex 

def custom_analyzer(text):
    words = regex.findall(r'\w2,', text) # extract words of at least 2 letters
    for w in words:
        yield w

count_vect = CountVectorizer(analyzer = custom_analyzer)
xv = count_vect.fit_transform(['she is a good girl','वो बहुत सुन्दर है','ఇది చాలా లాడిష్ మరియు బాల్య టీనేజ్ కుర్రాళ్ళు మాత్రమే దీనిని ఫన్నీగా చూడవచ్చు', 'దోపిడీ మరియు ఎక్కువగా లోతు లేదా అధునాతనత లేని నేరాలకు సంబంధించిన గ్రాఫిక్ చికిత్సను చూడటం భరించదగినది'])
count_vect.get_feature_names()

我使用了regex module,因为它支持比模块re 更多的编码(感谢answer 的解释)。

【讨论】:

以上是关于sklearn 中的 countvectorizer 仅适用于英语吗?的主要内容,如果未能解决你的问题,请参考以下文章

sklearn中CountVectorizer与TfidfVectorizer区别

Sklearn CountVectorizer:将表情符号保留为单词

sklearn CountVectorizer

Sklearn:将 lemmatizer 添加到 CountVectorizer

如何为 sklearn CountVectorizer 设置自定义停用词?

自定义词汇表上的 Sklearn Countvectorizer