我不希望长度小于 3 或大于 7。在 R 中有一种直接的方法可以做到这一点,但在 Python 中我不确定。
我试过这个,但仍然不起作用

from sklearn.feature_extraction.text import CountVectorizer
regex1 = '/^[a-zA-Z]{3,7}$/'
vectorizer = CountVectorizer( analyzer='word',tokenizer= tokenize,stop_words = stopwords,token_pattern  = regex1,min_df= 2, max_df = 0.9,max_features = 2000)
vectorizer1 = vectorizer.fit_transform(token_dict.values())

也尝试过其他正则表达式 -
  "^[a-zA-Z]{3,7}$"
r'^[a-zA-Z]{3,7}$'

最佳答案

CountVectorizer 的文档中,规定默认 token_pattern 采用 2 个或更多字母数字字符的标记。如果你想改变这个,传递你自己的正则表达式

在您的情况下,将 token_pattern = "^[a-zA-Z]{3,7}$" 添加到 CountVectorizer 的选项中

编辑

应该使用的正则表达式是 [a-zA-Z]{3,7} 。请参阅下面的示例 -

doc1 = ["Elon Musk is genius", "Are you mad", "Constitutional Ammendments in Indian Parliament",\
        "Constitutional Ammendments in Indian Assembly", "House of Cards", "Indian House"]

from sklearn.feature_extraction.text import CountVectorizer

regex1 = '[a-zA-Z]{3,7}'
vectorizer = CountVectorizer(analyzer='word', stop_words = 'english', token_pattern  = regex1)
vectorizer1 = vectorizer.fit_transform(doc1)

vectorizer.vocabulary_

结果 -
{u'ammendm': 0,
 u'assembl': 1,
 u'cards': 2,
 u'constit': 3,
 u'elon': 4,
 u'ent': 5,
 u'ents': 6,
 u'genius': 7,
 u'house': 8,
 u'indian': 9,
 u'mad': 10,
 u'musk': 11,
 u'parliam': 12,
 u'utional': 13}

关于python - 使用 CountVectorizer 时如何限制 token 长度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50152386/

10-11 20:13