Commit e0afc73f authored by Sylvain Coulange's avatar Sylvain Coulange
Browse files

finalisation analyse morphosyntaxique du japonais (effectuée sans contexte)

parent 1b8a1679
......@@ -2,7 +2,7 @@ print("Import des librairies et chargement du modèle de langue...")
from bs4 import BeautifulSoup as bs
import re, spacy
nlp = spacy.load("fr_core_news_md")
# nlp = spacy.load("fr_core_news_md")
print("Chargement des fichiers...")
......@@ -12,11 +12,6 @@ fi = 'g1jpfr/g1jpfr_initial.xml'
fr = 'g1jpfr/g1jpfr_revision.xml'
ff = 'g1jpfr/g1jpfr_final.xml'
# fs = 'g1frjp/g1frjp_source.xml'
# fi = 'g1frjp/g1frjp_initial.xml'
# fr = 'g1frjp/g1frjp_revision.xml'
# ff = 'g1frjp/g1frjp_final.xml'
with open(fs,'r') as f:
xs = bs(f.read(), "xml")
......@@ -29,10 +24,55 @@ with open(fr,'r') as f:
with open(ff,'r') as f:
xf = bs(f.read(), "xml")
xiPliste = xi.find_all('P')
xrPliste = xr.find_all('P')
xfPliste = xf.find_all('P')
######### Code pour récupérer les énoncés entiers #########
for x,p in enumerate(xrPliste):
# RECUPERER LA VERSION INITIALE ET LA VERSION FINALE
xrPini = re.sub(r'<edit auteur="[^"]*" categorie="correction" comment="[^"]*" date="[^"]*" final="[^"]*" idodf="[^"]*" initial="([^"]*)" resolu="1" tags="" type="[^"]*"/>', r'°\1*', str(xrPliste[x]))
xrPfin = re.sub(r'<edit auteur="[^"]*" categorie="correction" comment="[^"]*" date="[^"]*" final="([^"]*)" idodf="[^"]*" initial="[^"]*" resolu="1" tags="" type="[^"]*"/>', r'°\1*', str(xrPliste[x]))
xrPini = re.sub(r'<P id="\w+"/?>','', xrPini)
xrPini = re.sub(r'</P>','', xrPini)
xrPfin = re.sub(r'<P id="\w+"/?>','', xrPfin)
xrPfin = re.sub(r'</P>','', xrPfin)
def getListEditPos(xrp):
listEditPos = []
cptCar = 0
for car in xrp:
if car == "°":
listEditPos.append({
"debut":cptCar,
"fin":""
})
xrp = xrp[:cptCar] + xrp[cptCar+1:] # suppression de l'ancre
elif car == "*":
listEditPos[-1]["fin"] = cptCar
xrp = xrp[:cptCar] + xrp[cptCar+1:] # suppression de l'ancre
else:
cptCar += 1
return listEditPos
print('\nP',x)
print('\t', xrPini)
listEditPos = getListEditPos(xrPini)
s = ""
sf = 0
for ed in listEditPos:
for i in range(sf,ed['debut']):
s += ' '
sf =
print('\t', xrPfin)
"""
x1 = ""
x2 = ""
......@@ -122,6 +162,7 @@ def recupContext(edit, etat):
#print("\033[0;35m{}\033[0m|{}|\033[0;35m{}\033[0m".format(avant, edit[etat], apres))
return edit['idodf'], avant, edit[etat], apres, tags
##### AFFICHER LA LISTE : id + contexte.texte.contexte + tags[{},]
# print("Affichage du résultat :")
# for x,r in enumerate(xrPliste):
......@@ -163,45 +204,4 @@ with open('g1jpfr_revision_tags.xml', 'w') as outFile:
print('Terminé.')
######### Code pour récupérer les énoncés entiers #########
'''
for x,p in enumerate(xrPliste):
# # RECUPERER LA VERSION INITIALE ET LA VERSION FINALE
# xrPini = re.sub(r'<edit auteur="[^"]*" categorie="correction" comment="[^"]*" date="[^"]*" final="[^"]*" idodf="[^"]*" initial="([^"]*)" resolu="1" tags="" type="[^"]*"/>', r'\1', str(xrPliste[i]))
# xrPfin = re.sub(r'<edit auteur="[^"]*" categorie="correction" comment="[^"]*" date="[^"]*" final="([^"]*)" idodf="[^"]*" initial="[^"]*" resolu="1" tags="" type="[^"]*"/>', r'\1', str(xrPliste[i]))
# xrPini = re.sub(r'<P id="\w+">','', xrPini)
# xrPini = re.sub(r'</P>','', xrPini)
# xrPfin = re.sub(r'<P id="\w+">','', xrPfin)
# xrPfin = re.sub(r'</P>','', xrPfin)
# Récupérer le mot entier concerné par l'annotation (contexte gauche, contexte droit si il s'agit du même mot)
# ex. Un avocat ('', 'Un a', 'vocat') ; dires ('di', 're', 's')
iniliste = re.findall(r'(\w+)?(<edit auteur="[^"]*" categorie="correction" comment="[^"]*" date="[^"]*" final="[^"]*" idodf="[^"]*" initial="[^"]*" resolu="1" tags="" type="[^"]*"/>)?<edit auteur="[^"]*" categorie="correction" comment="[^"]*" date="[^"]*" final="[^"]*" idodf="([^"]*)" initial="([^"]+)" resolu="1" tags="" type="[^"]*"/>(<edit auteur="[^"]*" categorie="correction" comment="[^"]*" date="[^"]*" final="[^"]*" idodf="[^"]*" initial="[^"]*" resolu="1" tags="[^"]*" type="[^"]*"/>)?(\w+)?', str(p))
finliste = re.findall(r'(\w+)?(<edit auteur="[^"]*" categorie="correction" comment="[^"]*" date="[^"]*" final="[^"]*" idodf="[^"]*" initial="[^"]*" resolu="1" tags="" type="[^"]*"/>)?<edit auteur="[^"]*" categorie="correction" comment="[^"]*" date="[^"]*" final="([^"]+)" idodf="([^"]*)" initial="[^"]*" resolu="1" tags="" type="[^"]*"/>(<edit auteur="[^"]*" categorie="correction" comment="[^"]*" date="[^"]*" final="[^"]*" idodf="[^"]*" initial="[^"]*" resolu="1" tags="[^"]*" type="[^"]*"/>)?(\w+)?', str(p))
# print('\nP',x)
# print("INITIAL")
for i in iniliste:
exp = ''.join((i[0],i[3],i[5]))
# print(exp, '\t',(i[0], i[3], i[5]))
# anaExp = nlp(exp)
# tags = []
# for tok in anaExp:
# tags.append((tok.pos_,tok.tag_))
# print(i[2], '\t', exp, '\t', tags)
# print("\nFINAL")
for i in finliste:
exp = ''.join((i[0],i[2],i[5]))
# print(exp, '\t',(i[0], i[2], i[5]))
# anaExp = nlp(exp)
# tags = []
# for tok in anaExp:
# tags.append((tok.pos_,tok.tag_))
# print(i[3], '\t', exp, '\t', tags)
'''
\ No newline at end of file
"""
\ No newline at end of file
......@@ -89,34 +89,70 @@ def recupContext(edit, etat):
if not re.match(r'^.*[ .,]$', str(edit[etat])):
apres = checkAfter(edit, etat)
contexte = avant + edit[etat] + apres
txt = nlp(contexte)
# contexte = avant + edit[etat] + apres
txt = chasen.parse(edit[etat])
txt = txt.split('\n')
tags = []
for token in txt:
tags.append(token.tag_)
if token != "EOS" and len(token) > 0:
token = token.split('\t')
if token not in tags:
tags.append({
"text": token[0],
"lemma": token[2],
"pos": token[3].split('-')[0].strip(),
"tag": " ".join(token[3:]).strip(),
"dep": ""
})
#print("\033[0;35m{}\033[0m|{}|\033[0;35m{}\033[0m".format(avant, edit[etat], apres))
print("{}:\t\033[0;35m{}\033[0m{}\033[0;35m{}\033[0m\tTAGS:{}".format(edit['idodf'],avant, edit[etat], apres, tags))
return edit['idodf'], avant, edit[etat], apres, tags
##### AFFICHER LA LISTE : id + contexte.texte.contexte + tags[{},]
# print("Affichage du résultat :")
# for x,r in enumerate(xrPliste):
# print('\nP',x)
# edits = xrPliste[x].find_all('edit')
# for edit in edits:
# data = recupContext(edit,'initial')
# if data:
# idodf, avant, contenu, apres, tags = data
# print("{}:\t\033[0;35m{}\033[0m{}\033[0;35m{}\033[0m\tTAGS:{}".format(idodf, '', contenu, '', tags))
# data = recupContext(edit,'final')
# if data:
# idodf, avant, contenu, apres, tags = data
# print("{}:\t\033[0;35m{}\033[0m{}\033[0;35m{}\033[0m\tTAGS:{}".format(idodf, '', contenu, '', tags))
# ##### REMPLIR LES TAGS ET EXPORTER XML
print("Affichage du résultat :")
for x,r in enumerate(xrPliste):
print('\nP',x)
edits = xrPliste[x].find_all('edit')
for edit in edits:
recupContext(edit,'initial')
recupContext(edit,'final')
"""
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37
"""
for edit in edits:
data = recupContext(edit,'initial')
thisEditTags = []
if data:
idodf, avant, contenu, apres, tags = data
thisEditTags = tags
data = recupContext(edit,'final')
if data:
idodf, avant, contenu, apres, tags = data
for t in tags:
if t not in thisEditTags:
thisEditTags.append(t)
xr.find(idodf=idodf)['tags'] = str(thisEditTags)
print("Export...")
with open('g1frjp_revision_tags.xml', 'w') as outFile:
outFile.write(str(xr))
print('Terminé.')
######### Code pour récupérer les énoncés entiers #########
......
This diff is collapsed.
......@@ -53,6 +53,12 @@ avai<edit type="insertion"
REFLEXION ANALYSE MORPHOSYNTAXIQUE :
contrairement au français qui nécessite de prendre en compte le contexte (beaucoup de modification à l'intérieur des mots) les modifications du japonais ne semble pas nécessiter le contexte (il s'agit quasiexclusivement de mots entiers).
Cette différence est-elle dû à la langue ou au type de modification (suivi de modif en fr et commentaire en jp) ?
g1jpfr_revision_tags.xml a été généré en prenant en compte le contexte gauche et droit (jusqu'à une ponctuation ou une espace)
Pour g1frjp_revision_tags.xml, le contexte n'est pas pris en compte.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment