我正在处理大量用多种语言编写的文档。我想根据文档的 tf-idf 分数计算文档之间的余弦距离。到目前为止,我有:
from sklearn.feature_extraction.text import TfidfVectorizer
# The documents are located in the same folder as the script
text_files = [r'doc1', r'doc2', r'doc3']
files = [open(f) for f in text_files]
documents = [f.read() for f in files]
vectorizer = TfidfVectorizer(ngram_range=(1,1))
tfidf = vectorizer.fit_transform(documents)
vocabulary = vectorizer.vocabulary_
当 doc1、doc2 和 doc3 这三个文档包含英文文本时,该算法就像一个魅力和 vocabulary 确实包含来自不同文本主体的 unigrams。我也试过用俄语,效果也很好。但是,当我尝试使用一些日语文本时,该算法不再按预期工作。
问题出在日语中没有空格,因此 TfidfVectorizer 无法理解什么是单词什么不是。例如,我的 unigram 词汇表中会有这样的内容:
診多索いほ権込真べふり告車クノ般宮えぼぜゆ注携ゆクく供9時ク転組けが意見だっあ税新ト復生ひり教台話辞ゃに
这显然是一个句子而不是一个词。我该如何解决这个问题?
请您参考如下方法:
你应该为日语提供分词器
vectorizer = TfidfVectorizer(ngram_range=(1,1), tokenizer=jap_tokenizer)
其中 jap_tokenizer 是您创建的函数或类似 this 的函数.
