python tokenize - Come sbarazzarsi della punteggiatura usando il tokenizzatore NLTK?




4 Answers

Dai un'occhiata alle altre opzioni di tokenizzazione fornite da nltk here . Ad esempio, è possibile definire un tokenizer che preleva sequenze di caratteri alfanumerici come token e elimina tutto il resto:

from nltk.tokenize import RegexpTokenizer

tokenizer = RegexpTokenizer(r'\w+')
tokenizer.tokenize('Eighty-seven miles to go, yet.  Onward!')

Produzione:

['Eighty', 'seven', 'miles', 'to', 'go', 'yet', 'Onward']
stopwords remove

Sto appena iniziando a utilizzare NLTK e non capisco come ottenere un elenco di parole dal testo. Se uso nltk.word_tokenize() , ottengo un elenco di parole e segni di punteggiatura. Ho bisogno solo delle parole invece. Come posso eliminare la punteggiatura? Anche word_tokenize non funziona con più frasi: i punti vengono aggiunti all'ultima parola.




Come notato nei commenti, inizia con sent_tokenize (), perché word_tokenize () funziona solo su una singola frase. Puoi filtrare la punteggiatura con il filtro (). E se hai una stringa unicode assicurati che sia un oggetto unicode (non un 'str' codificato con qualche codifica come 'utf-8').

from nltk.tokenize import word_tokenize, sent_tokenize

text = '''It is a blue, small, and extraordinary ball. Like no other'''
tokens = [word for sent in sent_tokenize(text) for word in word_tokenize(sent)]
print filter(lambda word: word not in ',-', tokens)



Sotto il codice verranno rimossi tutti i segni di punteggiatura e i caratteri non alfabetici. Copiato dal loro libro.

http://www.nltk.org/book/ch01.html

import nltk

s = "I can't do this now, because I'm so tired.  Please give me some time. @ sd  4 232"

words = nltk.word_tokenize(s)

words=[word.lower() for word in words if word.isalpha()]

print(words)

produzione

['i', 'ca', 'do', 'this', 'now', 'because', 'i', 'so', 'tired', 'please', 'give', 'me', 'some', 'time', 'sd']



Penso che tu abbia bisogno di una sorta di corrispondenza di espressioni regolari (il seguente codice è in Python 3):

import string
import re
import nltk

s = "I can't do this now, because I'm so tired.  Please give me some time."
l = nltk.word_tokenize(s)
ll = [x for x in l if not re.fullmatch('[' + string.punctuation + ']+', x)]
print(l)
print(ll)

Produzione:

['I', 'ca', "n't", 'do', 'this', 'now', ',', 'because', 'I', "'m", 'so', 'tired', '.', 'Please', 'give', 'me', 'some', 'time', '.']
['I', 'ca', "n't", 'do', 'this', 'now', 'because', 'I', "'m", 'so', 'tired', 'Please', 'give', 'me', 'some', 'time']

Dovrebbe funzionare bene nella maggior parte dei casi poiché rimuove la punteggiatura conservando i token come "not", che non possono essere ottenuti dai tokenizer regex come wordpunct_tokenize .




Related