извлекая лемму из каждого предложения в моем списке предложений, а затем используйте его для вычисления оценки настроения каждого предложения - PullRequest
0 голосов
/ 28 января 2019

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

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)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...