Edg*_*rby 1 python parsing nlp tf-idf scikit-learn
我正在处理以多种语言编写的大量文档。我想根据文档的 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_
Run Code Online (Sandbox Code Playgroud)
当三个文档doc1,doc2并且doc3包含英文文本时,该算法就像一个魅力vocabulary一样,确实包含来自不同文本主体的 unigrams。我也试过俄语,效果也很好。但是,当我尝试使用一些日语文本时,该算法不再按预期工作。
问题源于日语没有空格,因此 TfidfVectorizer 无法理解什么是单词,什么不是。例如,我的 unigram 词汇表中会有这样的内容:
??????????????????????????????9???????????????????????? ??
Whic 显然是一个句子而不是一个词。我怎么解决这个问题?
你应该为日本人提供一个分词器
vectorizer = TfidfVectorizer(ngram_range=(1,1), tokenizer=jap_tokenizer)
Run Code Online (Sandbox Code Playgroud)
其中,jap_tokenizer要么是你创建一个函数或一个像这样。