2017-09-13 8 views
0

J'essaie d'utiliser le pyrouge pour calculer la similarité entre le résumé automatisé et les normes d'or. Quand il traite les deux résumés, Rouge fonctionne bien. Mais quand il écrit le résultat, il se plaint que "tuple index out of range" Est-ce que quelqu'un sait ce qui cause ce problème, et comment je peux le réparer?pyroute tuple hors index

2017-09-13 23:54:57,524 [MainThread ] [INFO ] Set ROUGE home directory to D:\ComputerScience\Research\ROUGE-1.5.5\ROUGE-1.5.5. 
2017-09-13 23:54:57,524 [MainThread ] [INFO ] Writing summaries. 
2017-09-13 23:54:57,524 [MainThread ] [INFO ] Processing summaries. Saving system files to C:\Users\zhuan\AppData\Local\Temp\tmppm193twp\system and model files to C:\Users\zhuan\AppData\Local\Temp\tmppm193twp\model. 
2017-09-13 23:54:57,524 [MainThread ] [INFO ] Processing files in D:\ComputerScience\Research\summary\Grendel\automated. 
2017-09-13 23:54:57,524 [MainThread ] [INFO ] Processing automated.txt. 
2017-09-13 23:54:57,539 [MainThread ] [INFO ] Saved processed files to C:\Users\zhuan\AppData\Local\Temp\tmppm193twp\system. 
2017-09-13 23:54:57,539 [MainThread ] [INFO ] Processing files in D:\ComputerScience\Research\summary\Grendel\manual. 
2017-09-13 23:54:57,539 [MainThread ] [INFO ] Processing BookRags.txt. 
2017-09-13 23:54:57,539 [MainThread ] [INFO ] Processing GradeSaver.txt. 
2017-09-13 23:54:57,539 [MainThread ] [INFO ] Processing GradeSummary.txt. 
2017-09-13 23:54:57,557 [MainThread ] [INFO ] Processing Wikipedia.txt. 
2017-09-13 23:54:57,562 [MainThread ] [INFO ] Saved processed files to C:\Users\zhuan\AppData\Local\Temp\tmppm193twp\model. 
Traceback (most recent call last): 

    File "<ipython-input-8-bc227b272111>", line 1, in <module> 
    runfile('D:/ComputerScience/Research/automate_summary.py', wdir='D:/ComputerScience/Research') 

    File "C:\Users\zhuan\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 707, in runfile 
    execfile(filename, namespace) 

    File "C:\Users\zhuan\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 101, in execfile 
    exec(compile(f.read(), filename, 'exec'), namespace) 

    File "D:/ComputerScience/Research/automate_summary.py", line 53, in <module> 
    output = r.convert_and_evaluate() 

    File "C:\Users\zhuan\Anaconda3\lib\site-packages\pyrouge\Rouge155.py", line 361, in convert_and_evaluate 
    rouge_output = self.evaluate(system_id, rouge_args) 

    File "C:\Users\zhuan\Anaconda3\lib\site-packages\pyrouge\Rouge155.py", line 331, in evaluate 
    self.write_config(system_id=system_id) 

    File "C:\Users\zhuan\Anaconda3\lib\site-packages\pyrouge\Rouge155.py", line 315, in write_config 
    self._config_file, system_id) 

    File "C:\Users\zhuan\Anaconda3\lib\site-packages\pyrouge\Rouge155.py", line 264, in write_config_static 
    system_filename_pattern = re.compile(system_filename_pattern) 

    File "C:\Users\zhuan\Anaconda3\lib\re.py", line 233, in compile 
    return _compile(pattern, flags) 

    File "C:\Users\zhuan\Anaconda3\lib\re.py", line 301, in _compile 
    p = sre_compile.compile(pattern, flags) 

    File "C:\Users\zhuan\Anaconda3\lib\sre_compile.py", line 562, in compile 
    p = sre_parse.parse(p, flags) 

    File "C:\Users\zhuan\Anaconda3\lib\sre_parse.py", line 855, in parse 
    p = _parse_sub(source, pattern, flags & SRE_FLAG_VERBOSE, 0) 

    File "C:\Users\zhuan\Anaconda3\lib\sre_parse.py", line 416, in _parse_sub 
    not nested and not items)) 

    File "C:\Users\zhuan\Anaconda3\lib\sre_parse.py", line 616, in _parse 
    source.tell() - here + len(this)) 

error: nothing to repeat 

Les normes d'or sont BookRags.txt, GradeSaver.txt, GradeSummary.txt, Wikipedia.txt Le résumé qui doit être comparé à automated.txt est
ne faut pas non * txt ou [ a-z0-9A-Z] + travail? Mais le précédent me donne « rien à redire erreur », ce dernier « indice de tuple hors de portée » erreur

r = Rouge155("D:\ComputerScience\Research\ROUGE-1.5.5\ROUGE-1.5.5") 
r.system_dir = 'D:\ComputerScience\Research\summary\Grendel\\automated' 
r.model_dir = 'D:\ComputerScience\Research\summary\Grendel\manual' 
r.system_filename_pattern = '[a-z0-9A-Z]+.txt' 
r.model_filename_pattern = '[a-z0-9A-Z]+.txt' 
output = r.convert_and_evaluate() 
print(output) 

Je réglage manuel à la fois répertoire. Il semble que le paquet Rouge puisse traiter les txts.

Répondre

1

Le problème est que la bibliothèque voyous n'a jamais représenté le cas où aucune correspondance n'est trouvée pour votre expression régulière. La ligne dans le code source de voyous id = match.groups(0)[0] est le problème. Si vous regardez ceci dans le documentation il est dit que les groupes fonctionnent Return a tuple containing all the subgroups of the match, from 1 up to however many groups are in the pattern.... Comme aucune correspondance n'a été trouvée, un tuple vide a été renvoyé et le code essaie d'extraire le premier élément d'un tuple vide, ce qui entraîne une erreur.

+0

Je vois. J'ai donc changé mon expression régulière en * .txt, qui correspondra à tous les résumés dans le dossier. Mais cela me donne maintenant une nouvelle erreur - rien à répéter. – Nat

+0

Souvent, un * sera traité comme un caractère générique qui correspond à n'importe quel nombre de caractères, mais lorsque vous utilisez regex, le * se comporte différemment. Voir https://stackoverflow.com/questions/31386552/nothing-to-repeat-from-python-regex pour plus d'informations à ce sujet. Comme vous l'avez mentionné '[a-z0-9A-Z] +' devrait choisir n'importe quoi. Pourriez-vous imprimer la variable system_dir utilisée par la fonction write_config_static et vous assurer que vos fichiers .txt se trouvent dans ce dossier, et non dans un sous-répertoire de ce dossier. –

+0

Il semble que le Rouge puisse trouver des résumés dans le répertoire du système et dans le répertoire du modèle car, à partir de sa sortie, il a traité les txts dans les deux répertoires. Le problème se produit toujours dans la fonction write_config_static. Mes system_dir et model_dir sont définis manuellement à une adresse absolue. – Nat