Извлекая лемму из каждого предложения в моем списке предложений, а затем используйте его для вычисления оценки настроения каждого предложения

Это мой сценарий:

1) я открываю файл и читаю его;

2) разбить текст на предложения;

3) лемматизировать предложение;

4) для каждого предложения лемматизации извлекаю лемму и помещаю ее в новый список;

5) Я ищу в лексиконе, чтобы найти слово в моем лексиконе в списке лемм для каждого из моих предложений;

# -*- coding: utf-8 -*-
import codecs 
import re
import nltk
from nltk import tokenize
import os
import sys
import subprocess
import glob
from os import path
import pprint
import csv
import numpy as pd
from itertools import islice

try:
import treetaggerwrapper
print("import TreeTagger OK")
except:
print("Import TreeTagger pas Ok")


alphabet = "([a-z][...])"
alphabets= "([A-Za-z])"
prefixes = "(Mr|St|Mrs|Ms|Dr)[.]"
suffixes = "(Inc|Ltd|Jr|Sr|Co)[.]"
starters      = "(M|Mr|Mrs|Ms|Dr|He\s|She\s|It\s|They\s|Their\s|Our\s|We\s|But\s|However\s|That\s|This\s|Wherever)"
acronyms = "([A-Z][.][A-Z][.](?:[A-Z][.])?)"
websites = "[.](com|net|org|io|gov)"
digits = "([0-9])"

with codecs.open('corpus','r', 'utf-8') as text:
text= text.read()
#print(text)

def split_into_sentences(text):
    text = " " + text + "  "
    text = text.replace("\n"," ")
    text = re.sub(prefixes,"\\1<prd>",text)
    text = re.sub(websites,"<prd>\\1",text)
    if "Ph.D" in text: text = text.replace("Ph.D.","Ph<prd>D<prd>")
    text = re.sub("\s" + alphabets + "[.] "," \\1<prd> ",text)
    text = re.sub(acronyms+" "+starters,"\\1<stop> \\2",text)
    text = re.sub(alphabets + "[.]" + alphabets + "[.]" + alphabets + "[.]","\\1<prd>\\2<prd>\\3<prd>",text)
    text = re.sub(alphabets + "[.]" + alphabets + "[.]","\\1<prd>\\2<prd>",text)
    text = re.sub(" "+suffixes+"[.] "+starters," \\1<stop> \\2",text)
    text = re.sub(" "+suffixes+"[.]"," \\1<prd>",text)
    text = re.sub(" " + alphabets + "[.]"," \\1<prd>",text)
    text = re.sub(digits + "[.]" + digits,"\\1<prd>\\2",text) 
    if "e.g." in text: text = text.replace("e.g.","e<prd>g<prd>")
    if "i.e." in text: text = text.replace("i.e.","i<prd>e<prd>")   
    if "..." in text: text = text.replace("...","<prd><prd><prd>")
    if "”" in text: text = text.replace(".”","”.")
    if "\"" in text: text = text.replace(".\"","\".")
    if "!" in text: text = text.replace("!\"","\"!")
    if "?" in text: text = text.replace("?\"","\"?")  
    text = text.replace(".",".<stop>")
    text = text.replace("?","?<stop>")
    text = text.replace("!","!<stop>")
    text = text.replace("<prd>",".")
    text = text.replace("...","...<stop>")
    text = text.replace("…","…<stop>")
    sentences = text.split("<stop>")
    sentences = sentences[:-1]
    sentences = [s.strip() for s in sentences]
    return sentences

sentences = split_into_sentences(text)

token= []
pos = []
lemme = []
sentences_all= []

for sentence in sentences:
tagger = treetaggerwrapper.TreeTagger(TAGLANG='fr')
tags = tagger.tag_text(sentence)
sentences_all.append(tags)
#print(sentences_all)

for list in sentences_all:
#print(list)
for mot in list:
    first, second, third = mot.split()
    token.append(first)
    pos.append(second)
    lemme.append(third)     
#print(token)
#print(pos)     
print(lemme)

Итак, я хотел бы извлечь для каждого предложения его лемму и поместить его в новый список, чтобы у каждого предложения был свой список лемм, но я смог сохранить лемму всех моих предложений в уникальном список и это то, что я не хочу. Я хотел бы иметь список lemme для каждого предложения, чтобы рассчитать оценку настроения для каждого предложения.

Итак, в конце я должен уметь писать, предложение одно положительное и т. Д.

Когда я печатаю теги предложений, у меня есть это:

  ['Moi\tPRO:PER\tmoi', 'je\tPRO:PER\tje', 'ne\tADV\tne', 'trouve\tVER:pres\ttrouver', 'pas\tADV\tpas', 'très\tADV\ttrès', 'esthétique\tADJ\testhétique', '.\tSENT\t.']

Вот как это предложение, я хотел бы для каждого предложения, как я сказал выше, убрать только лемму и затем вычислить счет, читая мой лексикон. Это мой код лексикона (вначале я написал его для вычисления оценки текста, но теперь мне нужно адаптировать его для вычисления уровня предложений:

dico = {}
#lexique = open('lexique.txt', 'rb')
with codecs.open('lexique2.txt', 'r', 'utf-8', errors = 'ignore') as lexique:
for ligne in islice(lexique, 31, None):
    #print(ligne)
    ligne = ligne.split(';')
    #print(ligne)
    #print(ligne[-4:])
    dico.update({ligne[-4]:ligne[-3:]})
#print(dico)
somme_V0 = []
somme_V1 = []
somme_V2 = []

for k, v in dico.items():
    if k in lemme:
            #print(k,v)
            somme_V0.append(int(v[0]))
            somme_V1.append(int(v[1]))
            somme_V2.append(int(v[2]))

#print("pos: " + str(sum(somme_V0)))
#print("neu: " + str(sum(somme_V1)))
#print("neg: " + str(sum(somme_V2)))

#Calcul de la polarité du texte :
if sum(somme_V0) > sum(somme_V1) and sum(somme_V0) > sum(somme_V2):
    print("le texte a une polarité positive de " + str(sum(somme_V0)))
elif sum(somme_V1) > sum(somme_V0) and sum(somme_V1) > sum(somme_V2):
    print("le texte a une polarité neutre de " + str(sum(somme_V1)))
elif sum(somme_V2) > sum(somme_V0) and sum(somme_V2) > sum(somme_V1):
    print("le texte a une polarité négative de " + str(sum(somme_V2)))

0 ответов

Другие вопросы по тегам