特殊情况下删除标点符号

2024-09-27 21:28:25 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个例子,我是如何标记一个短语,我的语言是西班牙语

texto= "esto es un texto, para el sr. gómez. Esto; es una prueba que puedes encontrar en www.google.com quisiera encontrarla.. claro esta,.Quisiera mejorarlo"

当我使用nltk标记我的短语时,这是输出:

['esto', 'es', 'un', 'texto', ',', 'para', 'el', 'sr.', 'gómez', '.', 'Esto', ';', 'es', 'una', 'prueba', 'que', 'puedes', 'encontrar', 'en', 'www.google.com','quiero','encontarla..','esta,.', 'quisiera','mejoralo']

除了sr.www.google.com这样的有效分数外,我如何消除标点符号

from nltk.tokenize import word_tokenize
texto= "esto es un texto, para el sr. gómez. Esto; es una prueba que puedes encontrar en www.google.com quisiera encontrarla.."
palabras_tokenizadas=(word_tokenize(texto,"spanish"))
print(palabras_tokenizadas)

结果应该是:

['esto', 'es', 'un', 'texto',  'para', 'el', 'sr.', 'gómez',  'Esto',  'es', 'una', 'prueba', 'que', 'puedes', 'encontrar', 'en', 'www.google.com', 'quisiera', 'encontrarla', 'claro', 'esta', 'quisiera', 'mejorarlo']

我试过这样的方法,但它并不能解决我的问题(像"encontarla..""esta,."这样的词的问题)

punctuation = [",", ";", ".",...............] # The tokens that I want to skip
palabras_tokenizadas_1 = [ palabra for palabra in palabras_tokenizadas if palabra not in punctuation ]

我想在任何一个有分数的句子中,用最好的方法来解决我的问题,而不是仅仅用这句话来解决问题。你怎么能做到


Tags: comeswwwgoogleelunpruebapara
1条回答
网友
1楼 · 发布于 2024-09-27 21:28:25

一种方法是使用正则表达式:

>>> import re
>>> rxx = re.compile(r'([^.,]*)([.,]{2,})')     # Extend [.,] as needed (twice);  {2,} means >= 2
>>> a=["encontarla..", "esta,.", "sr.", "texto", "ellipsis...", "infinitecommas" + 32767 * ","]
>>> [rxx.sub(lambda m: m.group(1), word) for word in a]
['encontarla', 'esta', 'sr.', 'texto', 'ellipsis', 'infinitecommas']

nltk非常了解正则表达式,因此您可以让标记器自己应用这个mod

相关问题 更多 >

    热门问题