[Python] ricerca di stringhe in un testo
Marco Giusti
marco.giusti a gmail.com
Mer 26 Giu 2013 17:02:48 CEST
On Wed, Jun 26, 2013 at 04:28:36PM +0200, Riccardo mancuso wrote:
> alla fine ho trovato questa soluzione, che memorizza in un array la
> posizione dell'inizio della parola, sfruttando il metodo find:
>
> pos=testo.find("via")
> a=[]
> while pos!=-1:
> a.append(pos)
> pos=testo.find("via",pos+1)
Adesso mi darai del enoilgoc[::-1] ma la mia soluzione non è la
migliore. Il primo problema è proprio la divisione in parole, infatti
così avrai anche dei falsi positivi come viavai. Non conosco nltk ma ho
appena letto la home page e la prima riga di codice è proprio la
divisione in parole. Puoi comunque costruirti un tokenizer senza usare
nltk, ma ancora l'esempio che ti propongo ha le sue grosse lacunee, per
esempio non so' perché i caratteri accentati non vengono considerati
delle lettere, ma unicode è un mondo oscuro per me.
import string
def word_tokenizer(text):
start = 0
end = 0
letters = set(string.letters)
try:
while True:
while text[start] not in letters:
start += 1
end = start
while text[end] in letters:
end += 1
yield start, text[start:end]
start = end
except IndexError:
last = text[start:end]
if last:
yield start, last
def find_all(text, word):
return [i for i, w in word_tokenizer(text) if word == w]
if __name__ == "__main__":
import sys
import locale
locale.setlocale(locale.LC_ALL, "")
print find_all(sys.stdin.read(), "ciao")
Ciao
m.
Maggiori informazioni sulla lista
Python