pyrouge在Ubuntu下的使用

pip install pyrouge

如报错:

Cannot open exception db file for reading: data/WordNet-2.0.exc.db

则执行以下命令:

cd /home/yzhao/soft/ROUGE-1.5.5/RELEASE-1.5.5/data
rm WordNet-2.0.exc.db
./WordNet-2.0-Exceptions/buildExeptionDB.pl ./WordNet-2.0-Exceptions ./smart_common_words.txt ./WordNet-2.0.exc.db
from pyrouge import Rouge155

r = Rouge155('/home/yzhao/soft/ROUGE-1.5.5/RELEASE-1.5.5')
r.system_dir = '/mnt/hgfs/NLP/document summarization/MyProject/docs/system'
r.model_dir = '/mnt/hgfs/NLP/document summarization/MyProject/docs/gold'
r.system_filename_pattern = 'system.(\d+).txt'
r.model_filename_pattern = 'gold.[A-Z].#ID#.txt'

output = r.convert_and_evaluate()
print(output)
output_dict = r.output_to_dict(output)

在system文件夹下,放置自己生成的摘要,在gold文件夹下放置参考的摘要。

gold文件夹下,文件名为:gold.A.0.txt。数字0代表某篇文章的ID号,A代表某个模型生成的结果。

system文件夹下,文件名为:system.0.txt。数字0代表某篇文章的ID号。

文件中都是一行一个句子!。

如果是中文摘要,可能会报错:

Illegal division by zero at ./ROUGE-1.5.5.pl line 2450.

可以建立全局字典,用字典的索引号代替自己摘要中的中文字符,以空格间隔。

另外,TXT文件中好像不允许出现'<'符号,例如'<unk>',如果有可能会报错!

rouge的参数目前可以这样设置:

output = r.convert_and_evaluate(
        rouge_args='-e {}/data -a -2 -1 -c 95 -U -n 2 -w 1.2 -b 75'.format(rouge_path))

具体参数解释参见:ROUGE-1.5.5\RELEASE-1.5.5\README.txt

一个完整的例子:

from pyrouge import Rouge155
import shutil
import os

ROUGE_PATH = '/home/yzhao/soft/RELEASE-1.5.5'


def clear_dir(dpath):
    if os.path.exists(dpath):
        shutil.rmtree(dpath)
    os.mkdir(dpath)


def eval_rouge(results, golds):
    assert len(golds) == len(results)

    clear_dir('gold_summaries')
    clear_dir('result_summaries')

    r = Rouge155(ROUGE_PATH)
    r.system_dir = 'result_summaries'
    r.model_dir = 'gold_summaries'
    r.system_filename_pattern = 'result.(\d+).txt'
    r.model_filename_pattern = 'gold.[A-Z].#ID#.txt'

    for i in range(len(golds)):
        output_gold = open('gold_summaries/gold.A.%d.txt' % i, 'w')
        output_result = open('result_summaries/result.%d.txt' % i, 'w')

        if isinstance(golds[i], list):
            output_gold.write('\n'.join(golds[i]))  # 文件中一行一个句子!
        else:
            output_gold.write(golds[i])
        if isinstance(results[i], list):
            output_result.write('\n'.join(results[i]))
        else:
            output_result.write(results[i])

        output_gold.close()
        output_result.close()

    output = r.convert_and_evaluate(ROUGE_PATH)
    print(output)
    return r.output_to_dict(output)

下面是CNN/Daily Mail 数据集,测试集部分前三句话(lead 3)作为摘要的Rouge输出:

---------------------------------------------
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-1 Average_R: 0.55091 (95%-conf.int. 0.54797 - 0.55401)
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-1 Average_P: 0.33577 (95%-conf.int. 0.33329 - 0.33816)
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-1 Average_F: 0.40273 (95%-conf.int. 0.40049 - 0.40505)
---------------------------------------------
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-2 Average_R: 0.24293 (95%-conf.int. 0.24001 - 0.24585)
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-2 Average_P: 0.14795 (95%-conf.int. 0.14593 - 0.14998)
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-2 Average_F: 0.17738 (95%-conf.int. 0.17524 - 0.17959)
---------------------------------------------
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-3 Average_R: 0.13791 (95%-conf.int. 0.13537 - 0.14055)
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-3 Average_P: 0.08511 (95%-conf.int. 0.08334 - 0.08682)
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-3 Average_F: 0.10140 (95%-conf.int. 0.09945 - 0.10336)
---------------------------------------------
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-4 Average_R: 0.09013 (95%-conf.int. 0.08790 - 0.09242)
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-4 Average_P: 0.05633 (95%-conf.int. 0.05472 - 0.05792)
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-4 Average_F: 0.06666 (95%-conf.int. 0.06489 - 0.06843)
---------------------------------------------
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-L Average_R: 0.49833 (95%-conf.int. 0.49550 - 0.50132)
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-L Average_P: 0.30438 (95%-conf.int. 0.30205 - 0.30670)
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-L Average_F: 0.36483 (95%-conf.int. 0.36254 - 0.36709)
---------------------------------------------
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-W-1.2 Average_R: 0.21864 (95%-conf.int. 0.21717 - 0.22007)
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-W-1.2 Average_P: 0.22222 (95%-conf.int. 0.22045 - 0.22402)
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-W-1.2 Average_F: 0.21139 (95%-conf.int. 0.21012 - 0.21273)
---------------------------------------------
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-S* Average_R: 0.26414 (95%-conf.int. 0.26140 - 0.26721)
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-S* Average_P: 0.10291 (95%-conf.int. 0.10133 - 0.10447)
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-S* Average_F: 0.13238 (95%-conf.int. 0.13078 - 0.13402)
---------------------------------------------
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-SU* Average_R: 0.27598 (95%-conf.int. 0.27325 - 0.27906)
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-SU* Average_P: 0.10853 (95%-conf.int. 0.10692 - 0.11011)
/home/yzhao/soft/RELEASE-1.5.5 ROUGE-SU* Average_F: 0.13958 (95%-conf.int. 0.13798 - 0.14124)

猜你喜欢

转载自blog.csdn.net/uhauha2929/article/details/79438659