如何让Python的CountVectorizer将含半空格的波斯语词识别为单个词?
解决CountVectorizer识别波斯语半空格词的问题
CountVectorizer默认的分词规则会把半空格(\u200C)当成分隔符,导致带半空格的波斯语词被拆分。以下两种方法可以解决这个问题:
方法1:修改token_pattern参数
默认的token_pattern只匹配字母、数字和下划线,不包含波斯语字符和半空格。我们可以自定义正则,让它匹配由波斯语字符和半空格组成的连续序列:
from sklearn.feature_extraction.text import CountVectorizer # 正则范围包含波斯语字符(\u0600-\u06FF)和半空格(\u200C) custom_token_pattern = r'(?u)[\u0600-\u06FF\u200C]+' vectorizer = CountVectorizer(token_pattern=custom_token_pattern) test_text = "درختهای زیبا" vectorizer.fit([test_text]) print(vectorizer.get_feature_names_out()) # 输出结果:['درختهای' 'زیبا']
方法2:自定义分词函数
如果需要更灵活的分词逻辑,可以直接写一个分词函数,专门提取包含半空格的波斯语词:
from sklearn.feature_extraction.text import CountVectorizer import re def persian_custom_tokenizer(text): # 用正则匹配所有符合要求的词 regex_pattern = re.compile(r'[\u0600-\u06FF\u200C]+') return regex_pattern.findall(text) vectorizer = CountVectorizer(tokenizer=persian_custom_tokenizer) test_text = "درختهای زیبا" vectorizer.fit([test_text]) print(vectorizer.get_feature_names_out()) # 输出结果:['درختهای' 'زیبا']
注意:使用自定义分词函数时,CountVectorizer会忽略token_pattern参数,不需要额外设置。
内容的提问来源于stack exchange,提问作者Sedghian
相关产品推荐
相关产品推荐

