我希望我不必提供示例集。
我有一个二维数组,其中每个数组包含句子中的一组单词。
我正在使用CountVectorizer在整个二维数组上有效地调用 fit_transform
,这样我就可以构建单词词汇表。
但是,我有这样的句子:
u'Besides EU nations , Switzerland also made a high contribution at Rs 171 million LOCATION_SLOT~-nn+nations~-prep_besides nations~-prep_besides+made~prep_at made~prep_at+rs~num rs~num+NUMBER_SLOT'
我当前的矢量化器在删除诸如 ~
和 +
作为标记时过于严格。而我希望它根据 split()
来查看词汇中的标记,即 rs~num+NUMBER_SLOT
本身应该是词汇中的一个单词,就像应该制作
一样。同时,像 the
the a
(正常的停用词集)这样的停用词应该被删除。
当前矢量化器:
vectorizer = CountVectorizer(analyzer="word",stop_words=None,tokenizer=None,preprocessor=None,max_features=5000)
您可以指定一个token_pattern
,但我不确定可以使用哪一个来实现我的目标。尝试:
token_pattern="[^\s]*"
引出以下词汇:
{u'': 0, u'p~prep_to': 3764, u'de~dobj': 1107, u'wednesday': 4880, ...}
这把事情搞砸了,因为 u''
不是我想要的词汇。
对于我想要构建的这种类型的 vocabulary_
,正确的标记模式是什么?
最佳答案
我已经弄清楚了。矢量化器允许 0 个或多个非空白项 - 它应该允许 1 个或更多。正确的 CountVectorizer
是:
CountVectorizer(analyzer="word",token_pattern="[\S]+",tokenizer=None,preprocessor=None,stop_words=None,max_features=5000)
关于python - 使用 CountVectorizer 对不带空格的 unicode 句子进行正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39322474/