[英]'CountVectorizer()' splitting on space instead of on comma
因此,在我的 dataframe 中,我有一列“演员”,其中包含多个演员的“名字姓氏”。
例如:“Dennis Christopher,Dennis Quaid,Daniel Stern”作为“类别”类型
当我使用CountVectorizer().fit_transform(df['Actors'])
时,它会将上述组稀疏为 6 个单词。 我希望 function 不考虑名称之间的“”(空格),而只考虑“,”,以便在前面的示例中它会稀疏为 3 个单词。
vectorizer = CountVectorizer()
Actors_f = vectorizer.fit_transform(df.loc[df['Actors'].notna(), 'Actors'])
有没有办法做到这一点?
与此问题类似: How to Treat number with decimals or with commas as one word in countVectorizer您必须更改用于标记输入的正则表达式。
正如文档所说,默认的正则表达式是:
token_pattern='(?u)\b\w\w+\b'
哪个匹配:
(/u)
- unicode 字符
\b
- 单词边界(例如空格)
\w
- 一个词
\w+
- 连续单词直到...
\b
- 另一个单词边界(例如字符串的结尾)
你需要的是这样的:
token_pattern='(?u)[a-zA-Z][a-z ]+'
特别是在token中包含了空格字符,使得捕捉name+surname为一个token。
检查正则表达式文档以了解正则表达式的含义。
我设法做到了
bigram_vectorizer = CountVectorizer(ngram_range=(2, 2), min_df=1)
bigram_vectorizer.fit_transform(df['Actors'])
可能是一种更具可读性和直观性的方法
import re
re_exp = r"\,"
vectorizer = CountVectorizer(tokenizer=lambda text: re.split(re_exp,text))
tokenizer: callable, default=None 覆盖字符串标记化步骤,同时保留预处理和 n-gram 生成步骤。 仅在分析器 == 'word' 时适用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.