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与TfidfVectorizer区别