Exemple de mon fichier xml ressemble:en utilisant des arguments de mots clés en fonction pour la génération de n-grammes en option
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="folia.xsl"?>
<FoLiA xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://ilk.uvt.nl/folia" xml:id="untitled" generator="libfolia-v0.10">
<metadata type="native">
<annotations>
<token-annotation annotator="ucto" annotatortype="auto" datetime="2017-04-17T14:50:04" set="tokconfig-nl"/>
<pos-annotation annotator="frog-mbpos-1.0" annotatortype="auto" datetime="2017-04-17T14:50:04" set="http://ilk.uvt.nl/folia/sets/frog-mbpos-cgn"/>
<lemma-annotation annotator="frog-mblem-1.1" annotatortype="auto" datetime="2017-04-17T14:50:04" set="http://ilk.uvt.nl/folia/sets/frog-mblem-nl"/>
<chunking-annotation annotator="frog-chunker-1.0" annotatortype="auto" datetime="2017-04-17T14:50:04" set="http://ilk.uvt.nl/folia/sets/frog-chunker-nl"/>
<entity-annotation annotator="frog-mwu-1.0" annotatortype="auto" datetime="2017-04-17T14:50:04" set="http://ilk.uvt.nl/folia/sets/frog-mwu-nl"/>
<entity-annotation annotator="frog-ner-1.0" annotatortype="auto" datetime="2017-04-17T14:50:04" set="http://ilk.uvt.nl/folia/sets/frog-ner-nl"/>
<morphological-annotation annotator="frog-mbma-1.0" annotatortype="auto" datetime="2017-04-17T14:50:04" set="http://ilk.uvt.nl/folia/sets/frog-mbma-nl"/>
<dependency-annotation annotator="frog-depparse-1.0" annotatortype="auto" set="http://ilk.uvt.nl/folia/sets/frog-depparse-nl"/>
</annotations>
</metadata>
<text xml:id="untitled.text">
<p xml:id="untitled.p.1">
<s xml:id="untitled.p.1.s.1">
<w xml:id="untitled.p.1.s.1.w.1" class="WORD">
<t>De</t>
<pos class="LID(bep,stan,rest)" confidence="0.999701" head="LID">
<feat class="bep" subset="lwtype"/>
<feat class="stan" subset="naamval"/>
<feat class="rest" subset="npagr"/>
</pos>
<lemma class="de"/>
<morphology>
<morpheme>
<t offset="0">de</t>
</morpheme>
</morphology>
</w>
je fais une fonction pour générer mot uniforme, bi et trigrammes d'un fichier xml. Je veux rendre le n-gramme optionnel, de sorte que vous puissiez choisir si vous voulez tous les n-grammes ou par exemple seulement les unigrams. Le résultat de ma fonction est la fréquence relative vectorisée du mot n-gram. J'ai essayé ceci en utilisant des arguments de mot-clé dans mes paramètres (en utilisant Vrai et Faux). Je reçois un dictionnaire vide, donc je dois faire quelque chose de mal. Voici ce que j'ai. Quelqu'un peut-il me dire ce que je fais mal?
import re
import xml.etree.ElementTree as ET
def word_ngrams(frogged_xmlfile, unigrams=True, bigrams=True, trigrams=True):
vector = {}
tree = ET.parse(frogged_xmlfile) #enter the xml tree
root = tree.getroot()
tokens = []
words = []
regex = re.compile(r'[^0-9] |[^(\.|\,|\?|\:|\;|\!)]')
for node in root.iter('w'):
for w in node.findall('t'):
tokens.append(w.text)
for word in tokens:
if regex.search(word):
words.append(word)
if (unigrams):
for n in [1]: #unigrams
grams = ngrams(words, n)
fdist = FreqDist(grams)
total = sum(c for g,c in fdist.items())
for gram, count in fdist.items():
vector['w'+str(n)+'+'+' '.join(gram)] = count/total
if (bigrams):
for n in [2]: #bigrams
grams = ngrams(tokens, n)
fdist = FreqDist(grams)
total = sum(c for g,c in fdist.items())
for gram, count in fdist.items():
vector['w'+str(n)+'+'+' '.join(gram)] = count/total
if (trigrams):
for n in [3]: #trigrams
grams = ngrams(tokens, n)
fdist = FreqDist(grams)
total = sum(c for g,c in fdist.items())
for gram, count in fdist.items():
vector['w'+str(n)+'+'+' '.join(gram)] = count/total
return vector
print(word_ngrams('romanfragment_frogged.xml', unigrams = True, bigrams = False, trigrams = False))
Le segment unigramme de ce code doit être en retrait, ce qui effacera votre logique. – robertlayton
@robertlayton, l'erreur d'identification a été faite lorsque j'ai tapé le code ici. Je l'ai réparé, mon problème reste. Ou voulez-vous dire autre chose? – Bambi
@HughBothwell je vous remercie pour les modifications, mais ce sont aussi des fautes que j'ai faites lors de la saisie du code ici – Bambi