【问题标题】:NLTK / Python: Tokenising text to fixed token lengthNLTK / Python:将文本标记为固定标记长度
【发布时间】:2014-10-30 06:49:28
【问题描述】:

我正在尝试编写一个简单的 python 脚本来导入 *.txt 文件并使用 NLTK 模块对其进行标记。

我面临的挑战是必须对完整的语料库进行标记,但每个标记的长度必须小于或等于 200 个字符 - NLTK 工具箱中是否有可以实现此目的的本机函数?

一个例子: 将前几段标记为“战争与和平”会产生以下 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(或其他语言解析器?)中是否已经存在本机功能会这样做并有效地处理极端情况吗?

【问题讨论】:

  • 你能举一个 200 字符令牌的例子吗?我想我从未见过超过 20 或 30 个字符的字符
  • 我添加了一个示例 - 要清楚字符数是指字母,而不是令牌中的单词(如果不清楚,请告诉我,我可以编辑问题)
  • 你真的运行过代码吗?我不相信这是标记器所做的。它应该使用 nltk 输出["But", "I", "warn"...],令牌是句子的一部分,可以这么说 - 或单词(但不总是)

标签: python nltk


【解决方案1】:

我不确定您要做什么,但如果您只想标记少于 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 个字符的标记并丢弃其余标记。如果您需要更多的控制粒度,您可能需要查看正则表达式。
附言抱歉,如果我误解了您的问题。

【讨论】:

  • 感谢您的回复 - 我不确定我的问题是否足够清楚,我需要标记整个语料库并让所有标记少于 200 个字符,而不仅仅是保留符合要求的标记标准:)
猜你喜欢
  • 2016-01-09
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 2020-03-29
  • 2011-04-25
  • 1970-01-01
  • 2015-08-13
  • 2018-03-11
相关资源
最近更新 更多