【问题标题】:Can I use TfidfVectorizer in scikit-learn for non-English language? Also how do I read a non-English text in Python?我可以在 scikit-learn 中将 TfidfVectorizer 用于非英语语言吗?另外,如何在 Python 中阅读非英文文本?
【发布时间】:2016-07-29 15:49:15
【问题描述】:

我必须阅读 Python 中包含英语和非英语(特别是马拉雅拉姆语)语言的文本文档。我看到以下内容:

>>>text_english = 'Today is a good day'
>>>text_non_english = 'ആരാണു സന്തോഷമാഗ്രഹിക്കാത്തത'

现在,如果我编写一个代码来提取第一个字母,使用

>>>print(text_english[0])
'T'

当我跑步时

>>>print(text_non_english[0])
�

要得到第一个字母,我必须写以下内容

>>>print(text_non_english[0:3])
ആ

为什么会这样? 我的目标是提取文本中的单词,以便我可以将其输入到 tfidf 转换器。当我从马拉雅拉姆语创建 tfidf 词汇表时,有些单词是不正确的两个字母。实际上,它们是完整单词的一部分。我应该怎么做才能使 tfidf 转换器采用完整的马拉雅拉姆语单词进行转换,而不是采用两个字母。

我为此使用了以下代码

>>>useful_text_1[1:3] # contains both English and Malayalam text

>>>vectorizer = TfidfVectorizer(sublinear_tf=True,max_df=0.5,stop_words='english')

# Learn vocabulary and idf, return term-document matrix
>>>vect_2 = vectorizer.fit_transform(useful_text_1[1:3])
>>>vectorizer.vocabulary_

词汇表中的一些单词如下:

ഷമ
സന
സഹ
ർക
ർത

词汇不正确。它没有考虑整个词。如何解决这个问题?

【问题讨论】:

  • 你正在使用 Python2 。也许您想切换到 Python 3?
  • 在 Python 3 上,text_non_english[0] == 'ആ'
  • @AnttiHaapala 好的。谢谢。这很有帮助。还有一个问题是 tfidf 转换器生成的词汇不正确,因为它没有考虑整个单词。如何纠正?
  • 你在useful_text_1[1:3] 中进行psasing(2 个字节),你期待什么?
  • @AnttiHaapala 实际上没有。有用的文本[1:3] 是一组两个句子。有用_text [1:3] = ['ആരാണുസന്തോഷമാഗ്രഹിക്കാത്തത്,പക്ഷെ,ഇനിയുംഭരണംവന്നാൽവലിയവിലവരുംചിലയിടത്ത്വരുംചിലയിടത്ത്......അഴിമതി......എന്തിനുഎന്തിനുനാംഇത്。 ഭരണം വരരുത്‌,വരാനനുവദിക്കരുത്','Manushyn aaya oru 首席部长,athu njangal idhehathil kaanunnoo']。

标签: python utf-8 scikit-learn tf-idf text-processing


【解决方案1】:

您必须以 utf-8 编码文本。但是马拉雅拉姆语的字母包含3个符号,所以需要使用unicode函数:

In[36]: tn = 'ആരാണു സന്തോഷമാഗ്രഹിക്കാത്തത'
In[37]: tne=unicode(tn, encoding='utf-8')
In[38]: print(tne[0])
ആ

【讨论】:

    【解决方案2】:

    使用虚拟标记器实际上对我有用

    vectorizer = TfidfVectorizer(tokenizer=lambda x: x.split(), min_df=1)
    
    >>> tn = 'ആരാണു സന്തോഷമാഗ്രഹിക്കാത്തത'
    >>> vectorizer = TfidfVectorizer(tokenizer=lambda x: x.split(),min_df=1)
    >>> vect_2 = vectorizer.fit_transform(tn.split())
    >>> for x in vectorizer.vocabulary_:
    ...     print x
    ... 
    സന്തോഷമാഗ്രഹിക്കാത്തത
    ആരാണു
    >>> 
    

    【讨论】:

    • 你能解释一下吗
    • 如果我先对文本进行编码tne = [x.encode['utf-8'] for x in tn] 并将tne 传递给fit_transform 为什么它不返回unicode 令牌?
    猜你喜欢
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 2018-11-08
    • 2017-07-29
    相关资源
    最近更新 更多