NLTK CorpusReader for Indian language

时间:2017-12-12 13:18:54

标签: python python-3.x nlp nltk

试图让NLTK对从印度政府研究网站下载的旁遮普语语料库进行分析,该剧本是Gurmikhi。我的主要目标是在整个语料库中获得单词频率分布,因此这里的目的是让所有单词都被标记化。

我的问题似乎是NLTK如何阅读文本,因为当我使用Python的内置方法时:

    with open("./Punjabi_Corpora/Panjabi_Monolingual_TextCorpus_Sample.txt", "r") as f:
        lines = [line for line in f]
        fulltxt = "".join(lines)
        print(fulltxt.split)

结果(不完美,但可行):

    ['\ufeffਜਤਿੰਦਰ', 'ਸਾਬੀ', 'ਜਲੰਧਰ,', '10', 'ਜਨਵਰੀ-ਦੇਸ਼-ਵਿਦੇਸ਼', 'ਦੇ',...]

然而,当使用NLTK时:

    from nltk.corpus import PlaintextCorpusReader
    corpus_root = "./Punjabi_Corpora"
    corpus = PlaintextCorpusReader(corpus_root,"Panjabi Monolingual_TextCorpus_Sample.txt")
    corpus.words('Panjabi_Monolingual_TextCorpus_Sample.txt')

我得到以下

    ['ਜਤ', 'ਿੰ', 'ਦਰ', 'ਸ', 'ਾ', 'ਬ', 'ੀ', 'ਜਲ', 'ੰ', 'ਧਰ', ...]

在这里,NLTK认为每个字符字形都是一个完整的单词,我猜它的印度文字知识还不够:)

根据NLTK文档,我可以推测,问题与Unicode编码有关,似乎文件和NLTK之间存在一些分歧...我一直在修补和谷歌搜索到目前为止我能够并且已经撞墙了。 任何想法将不胜感激!

1 个答案:

答案 0 :(得分:2)

你是对的。根据文档,PlainTextCorpusReader是ascii输入的阅读器集。因此,它不能正常工作也就不足为奇了。

我不是这个主题的专业人士,但我尝试使用IndianCorpusReader代替您的数据集,它似乎有效:

from nltk.corpus import IndianCorpusReader
corpus = IndianCorpusReader("./Punjabi_Corpora", "Panjabi Monolingual_TextCorpus_Sample.txt")
print(corpus.words('Panjabi Monolingual_TextCorpus_Sample.txt'))

输出:

['ਜਤਿੰਦਰ', 'ਸਾਬੀ', 'ਜਲੰਧਰ', '10', 'ਜਨਵਰੀ-ਦੇਸ਼-ਵਿਦੇਸ਼', ...]

在Python 3上测试。