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

Posted

技术标签:

【中文标题】Sklearn CountVectorizer:将表情符号保留为单词【英文标题】:Sk Learn CountVectorizer: keeping emojis as words 【发布时间】:2019-12-11 11:27:21 【问题描述】:

我在字符串上使用 Sk Learn CountVectorizer,但 CountVectorizer 丢弃了文本中的所有表情符号。

例如,???? Welcome 应该给我们:["\xf0\x9f\x91\x8b", "welcome"]

但是,运行时:

vect = CountVectorizer()
test.fit_transform(['???? Welcome'])

我只得到:["welcome"]

这与token_pattern 不把编码的表情符号算作一个单词有关,但是有没有自定义的token_pattern 来处理表情符号?

【问题讨论】:

【参考方案1】:

尝试使用参数CountVectorizer(analyzer = 'char', binary = True)

文档说:“token_pattern:表示什么构成“令牌”的正则表达式,仅在分析器 == 'word' 时使用”参见https://scikit-learn.org/dev/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html

另请参阅此笔记本:https://www.kaggle.com/kmader/toxic-emojis

【讨论】:

【参考方案2】:

还有一个couple 或packages 可以直接将表情符号/表情符号转换成文字,例如

import emot
>>> text = "I love python ? :-)"
>>> emot.emoji(text)
['value': '?', 'mean': ':man:', 'location': [14, 14], 'flag': True]

>> import emoji
>> print(emoji.demojize('Python is ?'))
Python is :thumbs_up:

【讨论】:

【参考方案3】:

是的,你是对的! token_pattern 必须更改。我们可以将其设为除空格以外的任何字符,而不仅仅是字母数字字符。

试试这个!

from sklearn.feature_extraction.text import TfidfVectorizer
s= ['? Welcome', '? Welcome']

v = TfidfVectorizer(token_pattern=r'[^\s]+')
v.fit(s)
v.get_feature_names()

# ['welcome', '?']


【讨论】:

以上是关于Sklearn CountVectorizer:将表情符号保留为单词的主要内容,如果未能解决你的问题,请参考以下文章

在 pandas 数据框中插入 sklearn CountVectorizer 的结果

如何为 sklearn 的 CountVectorizer 编写自定义标记器以将所有 XML 标记以及打开和关闭标记之间的所有文本视为标记

sklearn CountVectorizer

sklearn中CountVectorizer与TfidfVectorizer区别

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

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