[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