如何标记 NLTK 中的字符串句子?

Posted

技术标签:

【中文标题】如何标记 NLTK 中的字符串句子?【英文标题】:How do I tokenize a string sentence in NLTK? 【发布时间】:2013-02-10 01:32:07 【问题描述】:

我正在使用 nltk,所以我想创建自己的自定义文本,就像 nltk.books 上的默认文本一样。但是,我刚刚开始使用类似的方法

my_text = ['This', 'is', 'my', 'text']

我想找到任何方法来输入我的“文本”:

my_text = "This is my text, this is a nice way to input text."

哪种方法,python 或 nltk 允许我这样做。更重要的是,如何消除标点符号?

【问题讨论】:

您能否澄清一下,underestimate punctation symbols 是什么意思? 我认为他的意思是对输入的句子进行标记 是的,例如如果我这样做了:sentente = "This is my sentence, a sentence is a short expression" 所以,'sentence' 和 'sentence' 将是两个不同的元素... 【参考方案1】:

这个其实就在main page of nltk.org:

>>> import nltk
>>> sentence = """At eight o'clock on Thursday morning
... Arthur didn't feel very good."""
>>> tokens = nltk.word_tokenize(sentence)
>>> tokens
['At', 'eight', "o'clock", 'on', 'Thursday', 'morning',
'Arthur', 'did', "n't", 'feel', 'very', 'good', '.']

【讨论】:

问题是它没有拆分/。如果你有“今天和/或明天是好日子”,它默认将“和/或”作为单个标记。 我们如何将“n't”转换为“not”? @Omayr,我会使用正则表达式将“n't”转换为“not”。我在下面附上了一些示例代码。 re.sub("'t", 'ot', "n't, doesn't, can't, don't") 粗体 我在 Python2 中使用 word_tokenize,但在 Python3 中我想要一个字节列表,而不是字符串。有可能吗?【参考方案2】:

正如@PavelAnossov 回答的,规范的答案,使用nltk 中的word_tokenize 函数:

from nltk import word_tokenize
sent = "This is my text, this is a nice way to input text."
word_tokenize(sent)

如果你的句子真的足够简单:

使用string.punctuation 集,删除标点符号,然后使用空格分隔符分割:

import string
x = "This is my text, this is a nice way to input text."
y = "".join([i for i in x if not in string.punctuation]).split(" ")
print y

【讨论】:

@pavel 的回答将解决诸如didn't -> did + n't 之类的问题 word_tokenize 有什么问题?看到这么多反对票,我想确保我没有错过任何东西。 我没有投反对票,但我猜你的答案本质上是 Pavel 答案的副本。也许对他的回答发表评论会更合适。

以上是关于如何标记 NLTK 中的字符串句子?的主要内容,如果未能解决你的问题,请参考以下文章

NLTK 将标记化的句子转换为同义词集格式

Python - 用于将文本拆分为句子的正则表达式(句子标记)[重复]

从 NLTK 语料库中检索句子字符串

整理了25个Python文本处理案例,收藏!

如何用 Python 中的 NLTK 对中文进行分析和处理

用NLTK/Python生成一串N个随机英文单词