You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 15:00:49