NLTK单词标记化除了带破折号的单词之外的所有单词,例如('hi-there','me-you')。

问题描述 投票:0回答:1

我不知道如何使用 nltk.word_tokenize 方法来标记除了带破折号的单词以外的所有单词(即排除所有中间有破折号的单词)。例如:我尝试使用 RegexpTokenizer 并编写了一个 regex,但不知为何我让它不能像 word_tokenize 方法一样,排除 '-' 。

'hi-there', 'me-you'

我试着使用 RegexpTokenizer 编写了一个 regex,但不知为何,我让它不能像 word_tokenize 方法一样,将 '-' 排除在外。

输入:'你好,我是一个人造人'。

我想要的输出。

['hello','I','am','an','artificial-human']
python machine-learning nltk tokenize
1个回答
1
投票

Jay给你的答案可以正确地分离出由破折号连接的单词,但你必须在之后使用bigram of words来了解这些单词的组合。

例如,如果你之后要做一个TF-IDF,你可以这样生成。

TfidfVectorizer(ngram_range = (1,2)) 

这将生成一个考虑到单字和大字的向量器。

你也可以把破折号换成空,然后把两个词连成一体,之后再把这些词单独标记为一个词,把破折号的词作为整个词。

text = text.replace('-', '')
text = nltk.tokenize.word_tokenize(text)

输出。

['hello','I','am','an','artificialhuman']

1
投票

下面是我建议的两种方法,第一种是使用split()函数,是的,这不是一个理想的标记化选择,但很简单,似乎可以达到你想要的效果。

print('hello I am an artificial-human'.split())

如果你还想使用NLTK,你可以使用Whitespacetokenizer。

t='hello I am an artificial-human'
import nltk
from nltk.tokenize import WhitespaceTokenizer
x=WhitespaceTokenizer().tokenize(t)
print(x)

这两种情况的输出。

enter image description here

我不是NLTK的专家 因为我不知道这个tokeniser在其他情况下是如何表现的 我看到了这个例子 文章如果你有疑问,请看一下。


0
投票

您可以在处理文本之前,用空格替换所有"-"的实例。

text = text.replace("-", " ")
text = nltk.tokenize.word_tokenize(text)

当然,这意味着任何你想保留"-"的情况都不会被考虑在内(然而,我不确定是否有任何标记器具有这种行为,我想不出任何你想保留"-"的情况)。

如果你愿意换库的话。spacy 是一个能实现你所想的选项。

import spacy
nlp = spacy.load("en_core_web_sm")

for token in nlp("hello-world, nice to meet you!"):
    print(token)
hello
-
world
,
nice
to
meet
you
!
© www.soinside.com 2019 - 2024. All rights reserved.