это мой сценарий:
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)))