2014-10-27 59 views
0

我正在尝试编写一个简单的python脚本,用于导入* .txt文件并使用NLTK模块对其进行标记。NLTK/Python:将文本标记为固定令牌长度

我面临的挑战是必须标记完整的语料库,但每个标记的长度必须小于或等于200个字符 - NLTK工具箱中是否存在可实现此功能的本机功能?

一个例子: Tokenising第几段,以“战争与和平”的产生以下令牌是303个字符长

token = ["But I warn you, if you don't tell me that this means war, if you still try to defend the infamies and horrors perpetrated by that Antichrist--I really believe he is Antichrist--I will have nothing more to do with you and you are no longer my friend, no longer my 'faithful slave,' as you call yourself"] 

它仍包含标点符号(逗号,连字符),我可以写一个函数使用这些类型的断点来破解句子,我的问题是NLTK(或另一种语言解析器?)中是否已经存在本机功能,它可以做到这一点,并有效地处理角落案例?

+0

你能举一个200字符的例子吗?我不认为我曾经见过有超过20或30个字符的人 – 2014-10-29 22:41:01

+0

我已经添加了一个例子 - 要清楚的字符数指的是字母,而不是令牌中的单词(让我知道如果这是不明确的,我可以编辑这个问题) – AdamDynamic 2014-10-29 22:50:44

+0

你真的跑过代码?我不相信这是分词器的作用。它应该输出'[“但是”,“我”,“警告”] nltk,一个标记是句子的一部分,所以要说 - 或一个词(但不总是) – 2014-10-29 22:57:55

回答

0

我不知道你正在尝试做的,但如果你只想记号化的话有少于200个字符:

import nltk 
with open('somefile.txt','r') as fp: 
    tokenized_text = [word for word in nltk.tokenize.word_tokenize(fp.read()) if len(word) <= 200] 

这将只保留具有小于或令牌等于200个字符并丢弃其余。如果您需要更多控制的粒度,您可能需要查看正则表达式。
P.S.对不起,如果我误解了你的问题。

+0

感谢回应 - 我不确定我的问题是否足够清晰,我需要标记整个语料库并让所有标记少于200个字符,而不仅仅是符合标准的标记:) – AdamDynamic 2014-10-29 22:29:41