从自定义格式的数据创建语料库

时间:2012-04-04 07:11:05

标签: python nlp nltk

我有数百个包含我想用于NLTK的文本的文件。这是一个这样的文件:

বে,বচা ইয়াণ্ঠা,র্চা ঢার্বিত তোখাটহ নতুন, অ প্রবঃাশিত।
তবে ' এ বং মুশায়েরা ' পত্রিব্যায় প্রকাশিত তিনটি লেখাই বইযে
সংব্যজান ব্যরার জনা বিশেষভাবে পরিবর্ধিত। পাচ দাপনিকেব
ড:বন নিয়ে এই বই তৈরি বাবার পরিব্যল্পনাও ম্ভ্রাসুনতন
সামন্তেরই। তার আর তার সহকারীদেব নিষ্ঠা ছাডা অল্প সময়ে
এই বই প্রব্যাশিত হতে পারত না।,তাঁদের সকলকে আমাধ
নমস্কার জানাই।
বতাব্যাতা শ্রাবন্তা জ্জাণ্ণিক
জানুয়ারি ২ ণ্ট ণ্ট ৮ 
Total characters: 378

请注意,每行包含新句子。相反,句子终止符 - 相当于英语中的句号 - 是'。'符号

有人可以帮我创建我的语料库吗?如果导入变量MyData,我需要访问MyData.words()和MyData.sents()。此外,最后一行不应出现在语料库中(它只包含字符数)。

请注意,我需要立即对来自所有文件的数据进行操作。

提前致谢!

2 个答案:

答案 0 :(得分:1)

您无需自行输入文件或提供wordssents方法。 使用PlaintextCorpusReader读入您的语料库,它会为您提供这些内容。 语料库阅读器构造函数接受文件的路径和文件名模式以及输入编码的参数(请务必指定它)。

构造函数还有句子和单词标记化函数的可选参数,因此您可以将自己的方法传递给它,将文本分解为句子。如果单词和句子检测真的很简单,即如果| character有其他用途,你可以从nltk的RegexpTokenizer系列配置一个标记化函数,或者你可以从头开始编写自己的标记化函数。 (在编写自己的文档之前,请研究文档和代码,或编写存根以找出它所调用的输入类型。)

如果识别句子边界是非常重要的,你可以稍后弄清楚如何训练nltk的PunktSentenceTokenizer,它使用无调度的统计算法来了解句子终止符的哪些用法实际上结束了一个句子。

如果您的语料库阅读器的配置相当复杂,您可能会发现创建一个专门用于PlaintextCorpusReader的类很有用。但大部分时间都没有必要。看看NLTK代码,看看如何实现gutenberg语料库:它只是一个PlainTextCorpusReader实例,其中包含构造函数的适当参数。

答案 1 :(得分:0)

1)摆脱最后一行是相当简单的。

f = open('corpus.txt', 'r')
for l in f.readlines()[:-1]:
   ....

for循环中的[:-1]将跳过最后一行。

2)文件对象的内置readlines()函数通过使用换行符作为分隔符将文件中的内容分成行。所以你需要编写一些代码来缓存行,直到'|'看到了。什么时候'|'遇到,将缓存的行视为一个单句,并将其放在MyData