如何在NLTK中对字符串句子进行分词?

66
我正在使用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的可以让我做到这一点。更重要的是,我如何去除标点符号?


你能澄清一下,“低估标点符号”是什么意思吗? - quetzalcoatl
1
我认为他的意思是对输入的句子进行分词处理。 - alvas
1
是的,比如说如果我写了这样一行代码:sentence = "This is my sentence, a sentence is a short expression"那么,“sentence” 和 “a sentence” 就是两个不同的元素... - diegoaguilar
2个回答

169

这实际上是在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', '.']

3
问题在于它不能分割“/”。如果你有“今天和/或明天都是好日子”,默认情况下它会把“和/或”作为一个单独的标记。 - thang
3
我们如何将 "n't" 转换为 "not"? - Omayr
@Omayr,我会使用正则表达式将“n't”转换为“not”。我在下面附上了一些示例代码。{re.sub("'t", 'ot', "n't, doesn't, can't, don't")} bold - Samuel Nde
我之前在Python2中使用了word_tokenize,但是在Python3中,我想要一个字节列表而不是字符串。这是否可能? - Tedo Vrbanec

-7

正如@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

3
@Pavel的答案将解决诸如“didn't”->“did”+“n't”的问题。 - alvas
word_tokenize有哪些问题?看到有这么多的踩,我想确保我没有漏掉什么。 - flow2k
1
我没有点踩,但我猜你的回答基本上是 Pavel 的回答的复制品。也许在他的回答下发表评论会更合适。 - Anoyz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接