Python 标记单词,使用nltk删除点状动作

Python 标记单词,使用nltk删除点状动作,python,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', 'e

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

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']
['esto', 'es', 'un', 'texto', 'para', 'el', 'sr.', 'gómez', 'Esto', 'es', 'una', 'prueba', 'que', 'puedes', 'encontrar', 'en', 'www.google.com']
['!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~']
除了有效的分数(如
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 you want to skip
palabras_tokenizadas2 = [ palabra for palabra in palabras_tokenizadas1 if palabra not in punctuation ]
输出:

['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']
['esto', 'es', 'un', 'texto', 'para', 'el', 'sr.', 'gómez', 'Esto', 'es', 'una', 'prueba', 'que', 'puedes', 'encontrar', 'en', 'www.google.com']
['!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~']
对于所有标点符号,您可以检查
字符串。标点符号
,并如下使用:

import string
punctuation = list(string.punctuation)
输出:

['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']
['esto', 'es', 'un', 'texto', 'para', 'el', 'sr.', 'gómez', 'Esto', 'es', 'una', 'prueba', 'que', 'puedes', 'encontrar', 'en', 'www.google.com']
['!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~']
['!'、'、'、'、'、'、'、'、'、'、'、'、'('、')、'*'、'+'、'、'-'、'、'、'/'、':'、'、';'、'、'、'@'、'['、'\'、']、'^'、'、'、'、'、''、'、'、'、'、'、'、'、'、'、'、'、'、'、']
您可以使用:

res = [tkn for tkn in tkn_lst if tkn.lower().islower() or any(chr.isdigit() for chr in tkn)]
  • tkn.lower().islower()
    检查
  • any(chr.isdigit()…)
    允许有数字但没有字母的字符串
结合起来,它们要求每个标记包含一些字母数字部分,尽管如果我使用这个,我会通过助手函数使其更可读:

def has_alphanum(token):
    return token.lower().islower() or any(character.isdigit() for character in token)

res = [token for token in palabras_tokenizadas1 if has_alphanum(token)]

这并不能解决我的问题。在“www.google.com”和“sr”的情况下,将消除punctuation@unusuario不应该。如果简单标记化的输出是您在开始时发布的,则此方法不会从“sr”或“www.google.com”中删除“.”"。那是因为你在做单词之间的比较,而不是在字符级别。哦,你是对的,我认为有一种更聪明的方法可以从库中获取。对不起,我很感谢你的帮助,但这对最后一个单词不起作用,请看输出。@unsuario这不是你在问题中暴露的问题。有句子中出现错误,标记器无法处理。我的解决方案无法解决这个问题,因为这是另一个完全不同的问题。应该包括还是排除数字?
'1995'
例如。包括在内,我认为很抱歉,我不知道如何使用您的代码,当我去实现它时,我遇到了问题。s=“esto es un texto,para el sr.gómez.esto;es una prueba que puedes encontral en www.google.com quisiera encontrala.”请查看输出。Thanks@unusuario输入应该是palabras_tokenizadas1(一个令牌列表),而不是string.def has_alphanum(str):return token.lower().islower()或any(character.isdigit())对于令牌中的字符)palabras_tokenizadas=['esto','es','un','texto','para','el','sr','gómez','esto','esto','esto','es','una','prueba','que','puedes','Encentrar','en','www.google com','quiero','encontarla..]res=[palabras__tokenizadas中的令牌的令牌如果有字母(如有),这对我不起作用……islower或任何令牌都不起作用(character.isdigit()表示令牌中的字符)TypeError:“int”对象不可调用)这对我的最后一个字有效吗?我已更新了问题,以便您understand@unusuario不知道为什么它会给你一个例外。它。哦…请看最后一个词