Question

Je suis en train de traiter divers textes de regex et de python NLTK -qui est à http: // www .nltk.org / livre- . Je suis en train de créer un générateur de texte aléatoire et je suis un moment difficile avec un problème. Tout d'abord, voici mon algorithme:

  1. Entrez une phrase comme -Cette entrée est appelée chaîne de déclenchement -

  2. Get mot le plus long dans la chaîne de déclenchement

  3. Rechercher tous base de données du projet Gutenberg pour les phrases qui contiennent ce mot en minuscule majuscule -quel que soit -

  4. Retour la plus longue phrase qui a le mot que je parlais à l'étape 3

  5. Append la phrase à l'étape 1 et Step4 ensemble

  6. Répétez le processus. Notez que je dois obtenir le mot le plus long dans la deuxième phrase et continuer comme ça et ainsi de suite -

Jusqu'à présent, j'été en mesure de le faire pour deux premières phrases mais je ne peux pas effectuer une recherche insensible cas. base de données de phrase entière du projet Gutenberg est disponible via la fonction gutenberg.sents() mais regex - cas de recherche insensible est pratiquement impossible puisque le gutenberg.sents() sort les phrases dans les livres comme suit -dans une liste de format de liste -:

Exemple: toutes les phrases du macbeth de Shakespeare est appelé en tapant

import nltk

from nltk.corpus import gutenberg 

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

dans la ligne de commande shell python et la sortie est la suivante:

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

[La Tragédie de Macbeth de William Shakespare, 1603] et Primus Actus. étant les deux premières phrases.

Comment puis-je trouver le mot que je cherche quel que soit qu'il soit en majuscules / minuscules? Je suis désespérément besoin d'aide depuis que je bricoler avec cela pour les deux derniers jours et il commence à porter sur les nerfs. Merci beaucoup.

Était-ce utile?

La solution

Étant donné une L liste des mots, et un mot cible t,

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

vous indique si L a t mot d'une manière insensible à la casse. Il est plus rapide, bien sûr, faire

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

depuis Python ne « palan » le calcul constant hors de la boucle et, à moins que vous hissez vous-même, elle sera réalisée de façon répétée.

Étant donné une liste de listes lol, la plus longue sous-liste, y compris t se trouve par

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

Si des sous-listes multiples comprennent t et sont de la même longueur maximale, cela vous donnera le premier, comme il arrive.

Autres conseils

Que diriez-vous d'utiliser la fonction intégrée: str.lower () ¶     Retourne une copie de la chaîne convertie en minuscules.

Ensuite, il suffit de comparer les chaînes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top