Domanda

Sto cercando la lavorazione di vari testi di regex e NLTK di pitone -che è a http: // www .nltk.org / libro- . Sto cercando di creare un generatore di testo casuale e sto avendo un momento difficile con un problema. In primo luogo, qui è il mio algoritmo:

  1. Inserisci una frase come -questo ingresso è chiamato stringa di innesco -

  2. Get più lunga parola nella stringa di innesco

  3. Cerca tutti i database di Project Gutenberg per le frasi che contengono questa parola -regardless di minuscole e maiuscole -

  4. Ritorna la frase più lunga che ha la parola ho parlato al punto 3

  5. Append la frase nella Fase 1 e Fase 4 insieme

  6. Ripetere la procedura. Si noti che ho per ottenere la parola più lunga nella seconda frase, e continuare così e così via -

Finora sono stato in grado di fare questo per le prime due frasi, ma non è possibile eseguire una ricerca non insensibile. Intero database frase del Progetto Gutenberg è disponibile tramite la funzione gutenberg.sents() ma regex - caso ricerca maiuscole è praticamente impossibile in quanto il gutenberg.sents() emette le sentenze in libri come a seguito -in un elenco di formato elenco -:

Esempio: tutte le sentenze di Macbeth di Shakespeare è chiamato digitando

import nltk

from nltk.corpus import gutenberg 

gutenberg.sents('shakespeare-macbeth.txt') 

nella linea di comando shell pitone e uscita è:

[['[', 'The', 'Tragedie', 'of', 'Macbeth', 'by', 'William', 'Shakespeare', '1603', ']'], 
['Actus', 'Primus', '.'], .......] 

con [La Tragedie del Macbeth di William Shakespare, 1603] e Actus Primus. essendo le prime due frasi.

Come faccio a trovare la parola che sto cercando a prescindere che sia maiuscole / minuscole? Sono disperato bisogno di aiuto da quando sono stato armeggiare con questo negli ultimi due giorni e sta iniziando ad indossare sui nervi. Grazie mille.

È stato utile?

Soluzione

Dato un elenco L di parole, e una parola bersaglio t,

any(t.lower()==w.lower() for w in L)

si dice se L ha parola t in un modo maiuscole e minuscole. E 'più veloce, ovviamente, per fare

lt = t.lower()
any(lt==w.lower() for w in L)

dal momento che Python non "sollevamento" la costante di calcolo fuori dal giro e, a meno che non sollevarlo da soli, sarà eseguita più volte.

Dato un elenco di liste lol, la più lunga sotto-list tra cui t può essere trovato

longest = max((L for L in lol if any(lt==w.lower() for w in L)), key=len)

Se più sotto-liste includono t e sono della stessa lunghezza massima, questo vi darà il primo, come accade.

Altri suggerimenti

Come sull'utilizzo della funzione built-in: str.lower () ¶     Restituisce una copia della stringa convertita in minuscolo.

Poi basta confrontare le stringhe.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top