0
votes

Des phrases fractionnées, des mots de processus et une phrase de la phrase ensemble?

J'ai une fonction qui marque des mots. J'ai beaucoup de texte de phrases à plusieurs documents de page. Je suis coincé sur la façon de marquer les mots et de retourner le texte près de son état d'origine.

Voici un exemple de phrase: p> xxx pré>

Ce que je veux produire est ce que je veux produire est ce qui suit: p> xxx pré>

ci-dessous est un version factice de mon algorithme de notation. J'ai compris comment prendre le texte, la déchirer et le marquer. P>

Cependant, je suis coincé sur la façon de le remettre ensemble dans le format dont j'en ai besoin. p>

Voici une version factice de ma fonction: P>

def word_score(text):
    words_to_work_with = []
    words_to_return = []
    passed_text = TextBlob(passed_text)
    for word in words_to_work_with:
        word = word.singularize().lower()
        word = str(word)
        e_word_lemma = lemmatizer.lemmatize(word)
        words_to_work_with.append(e_word_lemma)
    for word in words to work with:
        if word == 'body':
            score = 2
        if word == 'ocean':
            score = 3
        else:
            score = None
        words_to_return.append((word,score))
    return words_to_return


2 commentaires

Êtes-vous sûr que ce code fonctionne? : def word_score (texte) manque d'un point de terminaison et passa_text = textblob (Payed_text) augmentera probablement une erreur


@MAXIMGI, la fonction réelle est compliquée, j'ai donc essayé de proposer un exemple simplifié, revisité-le par votre réponse et essayé de en faire un exemple meilleur simplifié. Merci.


3 Réponses :


1
votes

Donc, fondamentalement, vous souhaitez attribuer un score pour chaque mot. La fonction que vous donnez peut être améliorée à l'aide d'un Dictionnaire au lieu de plusieurs si code> déclarations. De plus, vous devez retourner tous les scores, au lieu de simplement le score du premier mot Word code> dans mots_to_work_with code> qui est le comportement actuel de la fonction puisqu'il retournera un entier sur le premier itération. Donc, la nouvelle fonction serait la suivante: xxx pré>

pour la deuxième partie, qui reconstruit la chaîne, je le ferais réellement dans la même fonction (donc cela répond à votre deuxième question): P >

def word_score_and_reconstruct(text):
    words_to_work_with = []
    passed_text = TextBlob(text)

    reconstructed_text = ''

    for word in words_to_work_with:
        word = word.singularize().lower()
        word = str(word)  # Is this line really useful ?
        e_word_lemma = lemmatizer.lemmatize(word)
        words_to_work_with.append(e_word_lemma)

    dict_scores = {'body': 2, 'ocean': 3}
    dict_strings = {'body': ' (2)', 'ocean': ' (3)'}

    word_scores = []

    for word in words_to_work_with:
        word_scores.append(dict_scores.get(word, None)) # we still construct the scores list here

        # we add 'word'+'(word's score)', only if the word has a score
        # if not, we add the default value '' meaning we don't add anything
        reconstructed_text += word + dict_strings.get(word, '')

    return reconstructed_text, word_scores


2 commentaires

On dirait que la solution potentielle valide, tentera de changer mon vrai en code pour tester et acceptera la réponse une fois que je le traverse. Merci!


Une petite suggestion pour le dict_strings : En supposant que vous en aurez beaucoup dans la pratique, vous pouvez créer ce dictionnaire avec une compréhension dict: {mot: '(' + str (score) + ')' Pour Word, score dans dict_scores.items ()}



0
votes

J'espère que cela aiderait. Basé sur votre question, cela a fonctionné pour moi.

Cordialement Cordialement !! P>

"""
Python 3.7.2

Input:
Saved text in the file named as "original_text.txt"
My body lies over the ocean, my body lies over the sea. 
"""
input_file = open('original_text.txt', 'r') #Reading text from file
output_file = open('processed_text.txt', 'w') #saving output text in file

output_text = []

for line in input_file:
    words =  line.split()
    for word in words:
        if word == 'body':
            output_text.append('body (2)')
            output_file.write('body (2) ')
        elif word == 'body,':
            output_text.append('body (2),')
            output_file.write('body (2), ')
        elif word == 'ocean':
            output_text.append('ocean (3)')
            output_file.write('ocean (3) ')
        elif word == 'ocean,':
            output_text.append('ocean (3),')
            output_file.write('ocean (3), ')
        else:
            output_text.append(word)
            output_file.write(word+' ')

print (output_text)
input_file.close()
output_file.close()


0 commentaires

0
votes

Voici une implémentation de travail. La fonction analyse d'abord le texte d'entrée sous forme de liste, de sorte que chaque élément de liste soit un mot ou une combinaison de caractères de ponctuation (par exemple, une virgule suivie d'un espace.) Une fois que les mots de la liste ont été traités, il combine la liste retour dans une chaîne et le retourne. xxx

sortie: xxx

Si vous avez plus de 2 mots que vous souhaitez marquer, en utilisant Un dictionnaire au lieu de si conditions est vraiment une bonne idée.


0 commentaires