it-idf 与 TfidfVectorizer 在日语文本上



我正在使用用多种语言编写的大量文档。我想根据文档的 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_

当三个文档doc1doc2doc3包含英文文本时,算法就像一个魅力,vocabulary确实包含来自不同文本主体的单字母。我也尝试过俄语,效果也很好。但是,当我尝试使用一些日语文本时,该算法不再按预期工作。

问题源于日语没有空格的事实,因此 TfidfVectorizer 无法理解什么是单词,什么不是。例如,我会在我的单字母词汇表中有这样的东西:

診多索いほ権込真べふり告車クノ般宮えぼぜゆ注携ゆクく供9時ク転組けが意見だっあ税新ト復生ひり教台話辞ゃに

Whic 显然是一个句子而不是一个词。如何解决这个问题?

你应该为日语提供一个标记器

vectorizer = TfidfVectorizer(ngram_range=(1,1), tokenizer=jap_tokenizer)

其中jap_tokenizer是您创建的函数或类似的函数。

这似乎是documents的英文版本,基本上是:

documents = ['one word after another', 'two million more words', 'finally almost there']

对于您的日语文档,请称它们为 j_doc1j_doc2j_doc3documents可能看起来像这样(只是一个例子;请耐心等待,因为我没有费心创建随机的日语句子):

documents = ['診多索いほ', '診多索いほ', '台話辞ゃに']

当前分词器查找字符串没有的空格。你可以试试这个:

documents = [" ".join(char for char in d) for d in documents]

现在文档看起来像这样,这可能更可行(尽管这取决于您,因为我不知道在每个日语字符之间总是添加一个空格是否合适):

documents
Out[40]: ['診 多 索 い ほ', '診 多 索 い ほ', '台 話 辞 ゃ に']

或者定义你自己的分词器,如另一个答案中所述。

相关内容

  • 没有找到相关文章

最新更新