2017-09-05 3 views
4

j'ai une ligne de cordes:Comment convertir la ligne de texte en mots significatifs

"specificationsinaccordancewithqualityaccreditedstandards" 

qui doit être divisé en mots tokenizés tels que:

"specifications in accordance with quality accredited standards" 

J'ai essayé nltk « s word_tokenize mais il n'a pas été en mesure de convertir,

Contexte: Je suis en train d'analyser un document PDF dans un fichier texte, et c'est le t ext que je reviens du convertisseur pdf, pour convertir le pdf en texte J'utilise PDFminer dans Python

+0

Y at-il un autre convertisseur de PDF, vous pouvez essayer? Ça ne devrait pas bloquer tous les mots ensemble comme ça. – sniperd

+3

vous allez très probablement rencontrer des problèmes d'ambiguïté. Par exemple: est le premier mot de cette chaîne "spécifique" (suivi de "at" et "ion", les deux mots uniques et valides) ou "spécification"? – Zinki

+0

Avez-vous essayé la brute en forçant votre chemin en cherchant tous les mots du dictionnaire? Assez sûr que vous pouvez trouver une bibliothèque avec tous les mots et dans le dictionnaire anglais. – semicolon

Répondre

2

Vous pouvez utiliser la récursivité pour résoudre ce problème. Tout d'abord, vous voulez télécharger un fichier txt dictionnaire, que vous pouvez obtenir ici: https://github.com/Ajax12345/My-Python-Projects/blob/master/the_file.txt

dictionary = [i.strip('\n') for i in open('the_file.txt')] 
def get_options(scrambled, flag, totals, last): 
    if flag: 
     return totals 

    else: 
     new_list = [i for i in dictionary if scrambled.startswith(i)] 
     if new_list: 

      possible_word = new_list[-1] 
      new_totals = totals 
      new_totals.append(possible_word) 
      new_scrambled = scrambled[len(possible_word):] 
      return get_options(new_scrambled, False, new_totals, possible_word) 

     else: 
      return get_options("", True, totals, '') 


s = "specificationsinaccordancewithqualityaccreditedstandards" 
print(' '.join(get_options(s, False, [], ''))) 

Sortie:

'specifications in accordance with quality accredited standards' 
+0

C'est ce que je cherchais, merci, aussi le dictionnaire peut être dynamique aussi bien et contenir des mots que nous avons déjà trouvés –

3

Vous pouvez utiliser un . Une trie est une structure de données qui permet la validation des mots.
C'est un arbre, dans lequel vous naviguez dans une branche pour des préfixes valides, et vous êtes averti lorsque vous frappez un monde entier.

Bien que je ne l'ai jamais utilisé "concrètement", j'ai trouvé cette implémentation python, datrie.

Ma pensée serait d'importer datrie, l'utiliser pour générer un trie à partir d'un dictionnaire txt (par exemple here), puis analyser la chaîne. Lire le caractère par caractère pendant que vous trouvez des correspondances dans le trie, et quand vous n'avez pas trouvé raisonnablement un mot, alors ajoutez-le à la chaîne de mots séparés.

Vous pouvez trouver plus sur triehere on wikipedia ou in this video (qui est celui qui m'a appris ce qu'un trie est).