簡體   English   中英

標記單詞,使用nltk刪除標點符號

[英]tokenize words, delete punctuaction using nltk

這是一個示例,說明了如何為西班牙語語言標記一個短語。

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.外,如何消除標點符號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,." "encontarla.."類的問題

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

我想以最好的方法在任何有分數的句子中全局解決我的問題,而不僅僅是解決問題。 怎么辦

您可以輕松地使用標點符號列表:

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']

對於所有標點符號,您可以檢查string.punctuation並按以下方式使用:

import string
punctuation = list(string.punctuation)

輸出:

['!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~']

您可以使用:

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)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM