在特殊情况下删除标点符号

时间:2019-03-14 13:51:33

标签: 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 ]

我想以最好的方法在任何有分数的句子中全局解决我的问题,而不仅仅是解决问题。怎么办?

1 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是使用正则表达式:

>>> 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。