因此,在我的数据框中,我有一个“演员”列,其中包含多个演员的“姓氏姓氏”。
例如:“丹尼斯·克里斯托弗,丹尼斯·奎德,丹尼尔·斯特恩”作为“类别”类型
当我使用CountVectorizer().fit_transform(df['Actors'])
时,会将上面的组稀疏为6个单词。我希望该函数不考虑名称之间的''(空格),而仅考虑'',以便在前面的示例中它将稀疏为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,您必须更改用于标记输入的正则表达式。
作为documentation says,默认正则表达式为:
token_pattern='(?u)\b\w\w+\b'
哪个匹配:
[(/u)
-Unicode字符
[\b
-单词边界(例如空格)
[\w
-一个字
\w+
-直至...的相应词
[\b
-另一个单词边界(例如字符串的结尾)]
您需要的是这个:
token_pattern='(?u)[a-zA-Z][a-z ]+'
尤其是,令牌中包含空格字符,使捕获名称+姓氏成为一个令牌。
检查the regular expression documentation正则表达式的含义。
我设法做到了
bigram_vectorizer = CountVectorizer(ngram_range=(2, 2), min_df=1)
bigram_vectorizer.fit_transform(df['Actors'])