Je voudrais créer un programme en python qui lit un fichier txt en entrée de l'utilisateur. Ensuite, je voudrais que le programme sépare les mots comme suit dans l'exemple ci-dessous:

Au moment de son accession, le Riksdag suédois détenait plus de pouvoir que la monarchie mais était amèrement divisé entre les partis rivaux.

  • À l'époque
  • le moment de
  • le temps de son
  • de son accession
  • son accession au ...

Et je veux que ce programme les enregistre dans un fichier différent. des idées?

-2
user9290537 26 janv. 2019 à 23:43

3 réponses

Meilleure réponse

Vous pouvez essayer ceci, notez qu'il échouera si vous ne lui donnez pas au moins 3 mots.

def get_words():
    with open("file.txt", "r") as f:
        for word in f.readline().split(" "):
            yield word.replace(",", "").replace(".", "")

with open("output.txt", "w") as f:
    it = get_words()
    current = [""] + [next(it) for _ in range(2)]
    for word in it:
        current = current[1:] + [word]
        f.write(" ".join(current) + "\n")

0
Benoît Pilatte 26 janv. 2019 à 21:51

Vous n'avez pas précisé le format dans lequel vous souhaitez enregistrer le texte dans un fichier différent. en supposant que vous le vouliez ligne par ligne, cela ferait:

def only_letters(word):
    return ''.join(c for c in word if 'a' <= c <= 'z' or 'A' <= c <= 'Z')

with open('input.txt') as f, open('output.txt', 'w') as w:
    s = f.read()
    words = [only_letters(word) for word in s.split()]
    triplets = [words[i:i + 3] for i in range(len(words) - 2)]
    for triplet in triplets:
        w.write(' '.join(triplet) + '\n')
0
motyzk 27 janv. 2019 à 01:17

Ma compréhension est que vous voulez générer n-grams qui est une pratique courante dans la vectorisation de texte avant de faire un NLP. Voici une implémentation simple:

from sklearn.feature_extraction.text import CountVectorizer

string = ["At the time of his accession, the Swedish Riksdag held more power than the monarchy but was bitterly divided between rival parties."]
# you can change the ngram_range to get any combination of words
vectorizer = CountVectorizer(encoding='utf-8', stop_words='english', ngram_range=(3,3))

X = vectorizer.fit_transform(string)
print(vectorizer.get_feature_names())

Ce qui vous donnera une liste de ngrammes d'une longueur de 3, mais la commande est perdue.

['adhésion du suédois', 'à l'époque', 'entre partis rivaux', 'amèrement divisé entre', 'mais était amèrement', 'divisé entre rival', 'détenait plus de pouvoir', 'son adhésion le', ' monarchie mais était "," plus de pouvoir que "," de son accession "," pouvoir que le "," riksdag détenait plus "," suédois riksdag détenait "," que la monarchie "," la monarchie mais "," le suédois riksdag ',' le temps de ',' le temps de son ',' était amèrement divisé ']

0
Amirhos Imani 26 janv. 2019 à 23:05