CountVectorizer fit-transform() 不适用于自定义 token_pattern
CountVectorizer fit-transform() not working for custom token_pattern
我需要对包含 'R'、'C' 等编程语言名称的文本使用 CountVectorizer。但是 CountVectorizer 会丢弃仅包含一个字符的 "words"。
cv1 = CountVectorizer(min_df=2, stop_words='english')
tokenize = cv1.build_tokenizer()
tokenize("Python, Time Series, Cloud, Data Modeling, R")
输出:
输出[172]:
['Python', 'Time', 'Series', 'Cloud', 'Data', 'Modeling']
然后我调整 'token_pattern' 使其将 'R' 也视为标记。
cv1 = CountVectorizer(min_df=1, stop_words='english', token_pattern=r'(?u)\b\w\w+\b|R|C' ,tokenizer=None)
tokenize = cv1.build_tokenizer()
tokenize("Python, Time Series, Cloud, R ,Data Modeling")
输出:
输出[187]:
['Python', 'Time', 'Series', 'Cloud', 'R', 'Data', 'Modeling']
但是,
cvmatrix1 = cv1.fit_transform(["Python, Time Series, Cloud, R ,Data Modeling"])
cv1.vocabulary_
给出输出:
输出[189]:
{'cloud': 0, 'data': 1, 'modeling': 2, 'python': 3, 'series': 4, 'time': 5}
为什么会这样?`
R 被删除的原因是正则表达式捕获大写字母 R,其中分词器的实际输入将是小写。其背后的原因是 pre-processor
在标记化之前对原始字符串调用 .lower()
函数:
tokenize = cv1.build_tokenizer()
preprocess = cv1.build_preprocessor()
tokenize(preprocess("Python, Time Series, Cloud, R ,Data Modeling"))
产量:
['python', 'time', 'series', 'cloud', 'data', 'modeling']
我需要对包含 'R'、'C' 等编程语言名称的文本使用 CountVectorizer。但是 CountVectorizer 会丢弃仅包含一个字符的 "words"。
cv1 = CountVectorizer(min_df=2, stop_words='english')
tokenize = cv1.build_tokenizer()
tokenize("Python, Time Series, Cloud, Data Modeling, R")
输出:
输出[172]: ['Python', 'Time', 'Series', 'Cloud', 'Data', 'Modeling']
然后我调整 'token_pattern' 使其将 'R' 也视为标记。
cv1 = CountVectorizer(min_df=1, stop_words='english', token_pattern=r'(?u)\b\w\w+\b|R|C' ,tokenizer=None)
tokenize = cv1.build_tokenizer()
tokenize("Python, Time Series, Cloud, R ,Data Modeling")
输出: 输出[187]: ['Python', 'Time', 'Series', 'Cloud', 'R', 'Data', 'Modeling']
但是,
cvmatrix1 = cv1.fit_transform(["Python, Time Series, Cloud, R ,Data Modeling"])
cv1.vocabulary_
给出输出:
输出[189]: {'cloud': 0, 'data': 1, 'modeling': 2, 'python': 3, 'series': 4, 'time': 5}
为什么会这样?`
R 被删除的原因是正则表达式捕获大写字母 R,其中分词器的实际输入将是小写。其背后的原因是 pre-processor
在标记化之前对原始字符串调用 .lower()
函数:
tokenize = cv1.build_tokenizer()
preprocess = cv1.build_preprocessor()
tokenize(preprocess("Python, Time Series, Cloud, R ,Data Modeling"))
产量:
['python', 'time', 'series', 'cloud', 'data', 'modeling']