Python 如何避免用下划线标记单词?

Python 如何避免用下划线标记单词?,python,nltk,tokenize,Python,Nltk,Tokenize,我正在尝试使用“nltk.word\u tokenize()”函数标记我的文本,但它会分割由“\u”连接的单词 例如,文本“A,\u B\u C!是一部电影!”将拆分为: ['a', ',', '_b_c', '!', 'is','a','movie','!'] 我想要的结果是: ['a,_b_c!', 'is', 'a', 'movie', '!'] 我的代码: 导入nltk text=“A,是一部电影!” nltk.tokenize(text.lower()) 任何帮助都将不胜感激 您

我正在尝试使用“
nltk.word\u tokenize()
”函数标记我的文本,但它会分割由“
\u
”连接的单词

例如,文本“
A,\u B\u C!是一部电影!
”将拆分为:

['a', ',', '_b_c', '!', 'is','a','movie','!']
我想要的结果是:

['a,_b_c!', 'is', 'a', 'movie', '!']
我的代码:

导入nltk
text=“A,是一部电影!”
nltk.tokenize(text.lower())

任何帮助都将不胜感激

您可以先使用空格将其拆分,然后在每个单词上使用
word\u tokenize
来处理标点符号

[word for sublist in [word_tokenize(x) if '_' not in x else [x] 
                       for x in text.lower().split()] for word in sublist] 
输出
['a,'u b'u c!','is','a','movie','!']

l=[word\u tokenize(x)if'\uu'not in x else[x]for x in text.lower().split()]
将返回一个列表,该列表仅在没有
的单词上运行
word\u tokenize


[子列表中的单词对应于子列表中的单词]
部分是将列表列表展平为单个列表

问题是您使用的是
word\u tokenize
,并用逗号分隔单词。我从未使用过
nltk
,但在使用之前我已经编写了一个lexer。这里可能会有帮助。text.split()将为您提供result@Asif但是分割会产生“movie!”作为一个整体,您可以使用regex来识别ex-
的模式,并将
替换为
,\u
并应用标记器。一旦标记化完成,您将
,\u
替换为
,\u
我认为您将需要编写一个自定义正则表达式来处理这个问题,因为您处理空格、逗号、下划线和标点符号的方式将其排除在我能想到的任何标准解析的范围之外。有nltk.tokenize.regexp可用于执行此操作: