rouge-chinese


Namerouge-chinese JSON
Version 1.0.3 PyPI version JSON
download
home_pagehttps://github.com/Isaac-JL-Chen/rouge_chinese.git
SummaryPython ROUGE Score Implementation for Chinese Language Task (official rouge score)
upload_time2022-09-18 18:50:45
maintainer
docs_urlNone
authorIsaac-JL-Chen
requires_python
licenseLICENCE.txt
keywords nl cl natural language processing computational linguistics summarization chinese
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Rouge-Chinese
*A full Python librarie for the ROUGE metric in Chinese Language Task [(paper)](http://www.aclweb.org/anthology/W04-1013).*

专用于计算中文rouge指标的python库。
### Difference

This library based on the [code](https://github.com/pltrdy/rouge) from pltrdy. Using the original code to compute rouge score in Chinese would meet some problems. For example, the stack overflow issue would occur and the Chinese sentences are not splited correctly. This code solves these problems and generates more accurate and "official" rouge scores in Chinese NLP tasks.

1. Changed the sentence cutting mechanism. Original code would split sentences only by '.'. The rouge-chinese would split sentences regarding Chinese punctuation in a more logical way.
2. Optimized memory usage in rouge-L score calculation. The new code did not generate longest common sequence since most of users did not need it. This part would be extremely memory costly since it contains iterative algorithm which would create lots of stacks. The new code could calculate the length of the longest common sequence without generating them. 
3. More accurate rouge scores. The original code replaced 'official' rouge-L scores with union rouge-L scores, which would certainly give users different results. Thanks to the memory optimization, the new code could give users 'official' rouge scores.

### 不同点

rouge-chinese库基于[rouge](https://github.com/pltrdy/rouge)库,针对中文NLP任务做出了改进。使用原始的rouge库计算中文的rouge score会遇到一些问题,例如,会产生栈溢出以及占据过大内存的问题(长文章甚至会占据数十GB),以及不计算union rouge score时不支持对中文文章的分句。新的rouge-chinese库不仅从根源上解决了这些问题,优化了算法,rouge-chinese库还舍弃了默认的rouge score近似指标union rouge score,转而通过优化后的算法提供用户最原始、准确和官方的rouge score指标。

1. 改进了中文的分句机制。原始的rouge库只根据'.'进行分句。rouge-chinese库除了英文标点外,还对中文的常见分句标点(。!?...)进行了囊括。
2. 优化了rouge-L score计算中的内存占用。rouge-chinese库计算rouge-L score时不再需要生成最长子序列,就可以直接计算出最长子序列的长度,并得出最终的rouge-L score。最长子序列的生成是算法中内存消耗最大的一块,由于其中含有递归算法,他会占用大量的栈,尤其是在遇到长文章时,容易导致内存溢出或栈溢出的问题。rouge-chinese库成功的绕过了这一步骤。
3. 更准确和官方的rouge scores。由于先前的rouge库算法存在内存占用过大的问题,因此他们使用分句后计算union rouge score的方法来近似实际的rouge score,但这会带来一定的误差,部分情况误差较大。由于我们成功解决了内存占用过大的问题,新算法支持计算出最准确,最原始和最官方的rouge score。

## Quickstart
### Clone & Install
```
pip install rouge-chinese
```
or:
```shell
git clone https://github.com/Isaac-JL-Chen/rouge_chinese.git
cd rouge_chinese
python setup.py install
# or
pip install -U .
```


### Use it as a library

###### Score 1 sentence

```python
from rouge_chinese import Rouge
import jieba # you can use any other word cutting library

hypothesis = "###刚刚发声,A股这种情况十分罕见!大聪明逆市抄底330亿,一篇研报引爆全球,市场逻辑生变?"
hypothesis = ' '.join(jieba.cut(hypothesis)) 

reference = "刚刚过去的这个月,美股总市值暴跌了将近6万亿美元(折合人民币超过40万亿),这背后的原因可能不仅仅是加息这么简单。最近瑞士信贷知名分析师Zoltan Polzsar撰写了一篇极其重要的文章,详细分析了现有世界秩序的崩坏本质以及美国和西方将要采取的应对策略。在该文中,Zoltan Polzsar直指美国通胀的本质和其长期性。同期,A股市场亦出现了大幅杀跌的情况。"
reference = ' '.join(jieba.cut(reference))

rouge = Rouge()
scores = rouge.get_scores(hypothesis, reference)
```

*Output:*

```json
[
  {
    "rouge-1": {
      "f": 0.4786324739396596,
      "p": 0.6363636363636364,
      "r": 0.3835616438356164
    },
    "rouge-2": {
      "f": 0.2608695605353498,
      "p": 0.3488372093023256,
      "r": 0.20833333333333334
    },
    "rouge-l": {
      "f": 0.44705881864636676,
      "p": 0.5277777777777778,
      "r": 0.3877551020408163
    }
  }
]
```

*Note: "f" stands for f1_score, "p" stands for precision, "r" stands for recall.*

###### Score multiple sentences
```python
import json
from rouge_chinese import Rouge

# Load some sentences
with open('./tests/data.json') as f:
  data = json.load(f)

hyps, refs = map(list, zip(*[[d['hyp'], d['ref']] for d in data]))
rouge = Rouge()
scores = rouge.get_scores(hyps, refs)
# or
scores = rouge.get_scores(hyps, refs, avg=True)
```

*Output (`avg=False`)*: a list of `n` dicts:

```
[{"rouge-1": {"f": _, "p": _, "r": _}, "rouge-2" : { .. }, "rouge-l": { ... }}]
```


*Output (`avg=True`)*: a single dict with average values:

```
{"rouge-1": {"f": _, "p": _, "r": _}, "rouge-2" : { ..     }, "rouge-l": { ... }}
``` 

###### Score two files (line by line)
Given two files `hyp_path`, `ref_path`, with the same number (`n`) of lines, calculate score for each of this lines, or, the average over the whole file. 

```python
from rouge_chinese import FilesRouge

files_rouge = FilesRouge()
scores = files_rouge.get_scores(hyp_path, ref_path)
# or
scores = files_rouge.get_scores(hyp_path, ref_path, avg=True)
```

### Use it from the shell (JSON Output)
```
$rouge -h
usage: rouge_chinese [-h] [-f] [-a] hypothesis reference

Rouge Metric Calculator

positional arguments:
  hypothesis  Text of file path
  reference   Text or file path

optional arguments:
  -h, --help  show this help message and exit
  -f, --file  File mode
  -a, --avg   Average mode

```

e.g. 


```shell
# Single Sentence
rouge_chinese "### 刚刚 发声 , A股 这种 情况 十分 罕见 ! 大 聪明 逆市 抄底 330 亿 , 一篇 研报 引爆 全球 , 市场 逻辑 生变 ?" \
      "刚刚 过去 的 这个 月 , 美股 总 市值 暴跌 了 将近 6 万亿美元 ( 折合 人民币 超过 40 万亿 ) , 这 背后 的 原因 可能 不仅仅 是 加息 这么 简单 。 最近 瑞士 信贷 知名 分析师 Zoltan   Polzsar 撰写 了 一篇 极其重要 的 文章 , 详细分析 了 现有 世界秩序 的 崩坏 本质 以及 美国 和 西方 将要 采取 的 应对 策略 。 在 该文 中 , Zoltan   Polzsar 直指 美国 通胀 的 本质 和 其 长期性 。 同期 , A股 市场 亦 出现 了 大幅 杀跌 的 情况 。"

# Scoring using two files (line by line)
rouge_chinese -f ./tests/hyp.txt ./ref.txt

# Avg scoring - 2 files
rouge_chinese -f ./tests/hyp.txt ./ref.txt --avg
```


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/Isaac-JL-Chen/rouge_chinese.git",
    "name": "rouge-chinese",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "NL,CL,natural language processing,computational linguistics,summarization,chinese",
    "author": "Isaac-JL-Chen",
    "author_email": "chn.jianlin@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/07/a6/3e418f8106d3c1b84e2859aa2093c83cb082e4698b02450940cebbe39eac/rouge_chinese-1.0.3.tar.gz",
    "platform": null,
    "description": "# Rouge-Chinese\n*A full Python librarie for the ROUGE metric in Chinese Language Task [(paper)](http://www.aclweb.org/anthology/W04-1013).*\n\n\u4e13\u7528\u4e8e\u8ba1\u7b97\u4e2d\u6587rouge\u6307\u6807\u7684python\u5e93\u3002\n### Difference\n\nThis library based on the [code](https://github.com/pltrdy/rouge) from pltrdy. Using the original code to compute rouge score in Chinese would meet some problems. For example, the stack overflow issue would occur and the Chinese sentences are not splited correctly. This code solves these problems and generates more accurate and \"official\" rouge scores in Chinese NLP tasks.\n\n1. Changed the sentence cutting mechanism. Original code would split sentences only by '.'. The rouge-chinese would split sentences regarding Chinese punctuation in a more logical way.\n2. Optimized memory usage in rouge-L score calculation. The new code did not generate longest common sequence since most of users did not need it. This part would be extremely memory costly since it contains iterative algorithm which would create lots of stacks. The new code could calculate the length of the longest common sequence without generating them. \n3. More accurate rouge scores. The original code replaced 'official' rouge-L scores with union rouge-L scores, which would certainly give users different results. Thanks to the memory optimization, the new code could give users 'official' rouge scores.\n\n### \u4e0d\u540c\u70b9\n\nrouge-chinese\u5e93\u57fa\u4e8e[rouge](https://github.com/pltrdy/rouge)\u5e93\uff0c\u9488\u5bf9\u4e2d\u6587NLP\u4efb\u52a1\u505a\u51fa\u4e86\u6539\u8fdb\u3002\u4f7f\u7528\u539f\u59cb\u7684rouge\u5e93\u8ba1\u7b97\u4e2d\u6587\u7684rouge score\u4f1a\u9047\u5230\u4e00\u4e9b\u95ee\u9898\uff0c\u4f8b\u5982\uff0c\u4f1a\u4ea7\u751f\u6808\u6ea2\u51fa\u4ee5\u53ca\u5360\u636e\u8fc7\u5927\u5185\u5b58\u7684\u95ee\u9898\uff08\u957f\u6587\u7ae0\u751a\u81f3\u4f1a\u5360\u636e\u6570\u5341GB\uff09\uff0c\u4ee5\u53ca\u4e0d\u8ba1\u7b97union rouge score\u65f6\u4e0d\u652f\u6301\u5bf9\u4e2d\u6587\u6587\u7ae0\u7684\u5206\u53e5\u3002\u65b0\u7684rouge-chinese\u5e93\u4e0d\u4ec5\u4ece\u6839\u6e90\u4e0a\u89e3\u51b3\u4e86\u8fd9\u4e9b\u95ee\u9898\uff0c\u4f18\u5316\u4e86\u7b97\u6cd5\uff0crouge-chinese\u5e93\u8fd8\u820d\u5f03\u4e86\u9ed8\u8ba4\u7684rouge score\u8fd1\u4f3c\u6307\u6807union rouge score\uff0c\u8f6c\u800c\u901a\u8fc7\u4f18\u5316\u540e\u7684\u7b97\u6cd5\u63d0\u4f9b\u7528\u6237\u6700\u539f\u59cb\u3001\u51c6\u786e\u548c\u5b98\u65b9\u7684rouge score\u6307\u6807\u3002\n\n1. \u6539\u8fdb\u4e86\u4e2d\u6587\u7684\u5206\u53e5\u673a\u5236\u3002\u539f\u59cb\u7684rouge\u5e93\u53ea\u6839\u636e'.'\u8fdb\u884c\u5206\u53e5\u3002rouge-chinese\u5e93\u9664\u4e86\u82f1\u6587\u6807\u70b9\u5916\uff0c\u8fd8\u5bf9\u4e2d\u6587\u7684\u5e38\u89c1\u5206\u53e5\u6807\u70b9\uff08\u3002\uff01\uff1f...\uff09\u8fdb\u884c\u4e86\u56ca\u62ec\u3002\n2. \u4f18\u5316\u4e86rouge-L score\u8ba1\u7b97\u4e2d\u7684\u5185\u5b58\u5360\u7528\u3002rouge-chinese\u5e93\u8ba1\u7b97rouge-L score\u65f6\u4e0d\u518d\u9700\u8981\u751f\u6210\u6700\u957f\u5b50\u5e8f\u5217\uff0c\u5c31\u53ef\u4ee5\u76f4\u63a5\u8ba1\u7b97\u51fa\u6700\u957f\u5b50\u5e8f\u5217\u7684\u957f\u5ea6\uff0c\u5e76\u5f97\u51fa\u6700\u7ec8\u7684rouge-L score\u3002\u6700\u957f\u5b50\u5e8f\u5217\u7684\u751f\u6210\u662f\u7b97\u6cd5\u4e2d\u5185\u5b58\u6d88\u8017\u6700\u5927\u7684\u4e00\u5757\uff0c\u7531\u4e8e\u5176\u4e2d\u542b\u6709\u9012\u5f52\u7b97\u6cd5\uff0c\u4ed6\u4f1a\u5360\u7528\u5927\u91cf\u7684\u6808\uff0c\u5c24\u5176\u662f\u5728\u9047\u5230\u957f\u6587\u7ae0\u65f6\uff0c\u5bb9\u6613\u5bfc\u81f4\u5185\u5b58\u6ea2\u51fa\u6216\u6808\u6ea2\u51fa\u7684\u95ee\u9898\u3002rouge-chinese\u5e93\u6210\u529f\u7684\u7ed5\u8fc7\u4e86\u8fd9\u4e00\u6b65\u9aa4\u3002\n3. \u66f4\u51c6\u786e\u548c\u5b98\u65b9\u7684rouge scores\u3002\u7531\u4e8e\u5148\u524d\u7684rouge\u5e93\u7b97\u6cd5\u5b58\u5728\u5185\u5b58\u5360\u7528\u8fc7\u5927\u7684\u95ee\u9898\uff0c\u56e0\u6b64\u4ed6\u4eec\u4f7f\u7528\u5206\u53e5\u540e\u8ba1\u7b97union rouge score\u7684\u65b9\u6cd5\u6765\u8fd1\u4f3c\u5b9e\u9645\u7684rouge score\uff0c\u4f46\u8fd9\u4f1a\u5e26\u6765\u4e00\u5b9a\u7684\u8bef\u5dee\uff0c\u90e8\u5206\u60c5\u51b5\u8bef\u5dee\u8f83\u5927\u3002\u7531\u4e8e\u6211\u4eec\u6210\u529f\u89e3\u51b3\u4e86\u5185\u5b58\u5360\u7528\u8fc7\u5927\u7684\u95ee\u9898\uff0c\u65b0\u7b97\u6cd5\u652f\u6301\u8ba1\u7b97\u51fa\u6700\u51c6\u786e\uff0c\u6700\u539f\u59cb\u548c\u6700\u5b98\u65b9\u7684rouge score\u3002\n\n## Quickstart\n### Clone & Install\n```\npip install rouge-chinese\n```\nor:\n```shell\ngit clone https://github.com/Isaac-JL-Chen/rouge_chinese.git\ncd rouge_chinese\npython setup.py install\n# or\npip install -U .\n```\n\n\n### Use it as a library\n\n###### Score 1 sentence\n\n```python\nfrom rouge_chinese import Rouge\nimport jieba # you can use any other word cutting library\n\nhypothesis = \"###\u521a\u521a\u53d1\u58f0\uff0cA\u80a1\u8fd9\u79cd\u60c5\u51b5\u5341\u5206\u7f55\u89c1\uff01\u5927\u806a\u660e\u9006\u5e02\u6284\u5e95330\u4ebf\uff0c\u4e00\u7bc7\u7814\u62a5\u5f15\u7206\u5168\u7403\uff0c\u5e02\u573a\u903b\u8f91\u751f\u53d8\uff1f\"\nhypothesis = ' '.join(jieba.cut(hypothesis)) \n\nreference = \"\u521a\u521a\u8fc7\u53bb\u7684\u8fd9\u4e2a\u6708\uff0c\u7f8e\u80a1\u603b\u5e02\u503c\u66b4\u8dcc\u4e86\u5c06\u8fd16\u4e07\u4ebf\u7f8e\u5143\uff08\u6298\u5408\u4eba\u6c11\u5e01\u8d85\u8fc740\u4e07\u4ebf\uff09\uff0c\u8fd9\u80cc\u540e\u7684\u539f\u56e0\u53ef\u80fd\u4e0d\u4ec5\u4ec5\u662f\u52a0\u606f\u8fd9\u4e48\u7b80\u5355\u3002\u6700\u8fd1\u745e\u58eb\u4fe1\u8d37\u77e5\u540d\u5206\u6790\u5e08Zoltan Polzsar\u64b0\u5199\u4e86\u4e00\u7bc7\u6781\u5176\u91cd\u8981\u7684\u6587\u7ae0\uff0c\u8be6\u7ec6\u5206\u6790\u4e86\u73b0\u6709\u4e16\u754c\u79e9\u5e8f\u7684\u5d29\u574f\u672c\u8d28\u4ee5\u53ca\u7f8e\u56fd\u548c\u897f\u65b9\u5c06\u8981\u91c7\u53d6\u7684\u5e94\u5bf9\u7b56\u7565\u3002\u5728\u8be5\u6587\u4e2d\uff0cZoltan Polzsar\u76f4\u6307\u7f8e\u56fd\u901a\u80c0\u7684\u672c\u8d28\u548c\u5176\u957f\u671f\u6027\u3002\u540c\u671f\uff0cA\u80a1\u5e02\u573a\u4ea6\u51fa\u73b0\u4e86\u5927\u5e45\u6740\u8dcc\u7684\u60c5\u51b5\u3002\"\nreference = ' '.join(jieba.cut(reference))\n\nrouge = Rouge()\nscores = rouge.get_scores(hypothesis, reference)\n```\n\n*Output:*\n\n```json\n[\n  {\n    \"rouge-1\": {\n      \"f\": 0.4786324739396596,\n      \"p\": 0.6363636363636364,\n      \"r\": 0.3835616438356164\n    },\n    \"rouge-2\": {\n      \"f\": 0.2608695605353498,\n      \"p\": 0.3488372093023256,\n      \"r\": 0.20833333333333334\n    },\n    \"rouge-l\": {\n      \"f\": 0.44705881864636676,\n      \"p\": 0.5277777777777778,\n      \"r\": 0.3877551020408163\n    }\n  }\n]\n```\n\n*Note: \"f\" stands for f1_score, \"p\" stands for precision, \"r\" stands for recall.*\n\n###### Score multiple sentences\n```python\nimport json\nfrom rouge_chinese import Rouge\n\n# Load some sentences\nwith open('./tests/data.json') as f:\n  data = json.load(f)\n\nhyps, refs = map(list, zip(*[[d['hyp'], d['ref']] for d in data]))\nrouge = Rouge()\nscores = rouge.get_scores(hyps, refs)\n# or\nscores = rouge.get_scores(hyps, refs, avg=True)\n```\n\n*Output (`avg=False`)*: a list of `n` dicts:\n\n```\n[{\"rouge-1\": {\"f\": _, \"p\": _, \"r\": _}, \"rouge-2\" : { .. }, \"rouge-l\": { ... }}]\n```\n\n\n*Output (`avg=True`)*: a single dict with average values:\n\n```\n{\"rouge-1\": {\"f\": _, \"p\": _, \"r\": _}, \"rouge-2\" : { .. \u00a0 \u00a0 }, \"rouge-l\": { ... }}\n``` \n\n###### Score two files (line by line)\nGiven two files `hyp_path`, `ref_path`, with the same number (`n`) of lines, calculate score for each of this lines, or, the average over the whole file. \n\n```python\nfrom rouge_chinese import FilesRouge\n\nfiles_rouge = FilesRouge()\nscores = files_rouge.get_scores(hyp_path, ref_path)\n# or\nscores = files_rouge.get_scores(hyp_path, ref_path, avg=True)\n```\n\n### Use it from the shell (JSON Output)\n```\n$rouge -h\nusage: rouge_chinese [-h] [-f] [-a] hypothesis reference\n\nRouge Metric Calculator\n\npositional arguments:\n  hypothesis  Text of file path\n  reference   Text or file path\n\noptional arguments:\n  -h, --help  show this help message and exit\n  -f, --file  File mode\n  -a, --avg   Average mode\n\n```\n\ne.g. \n\n\n```shell\n# Single Sentence\nrouge_chinese \"### \u521a\u521a \u53d1\u58f0 \uff0c A\u80a1 \u8fd9\u79cd \u60c5\u51b5 \u5341\u5206 \u7f55\u89c1 \uff01 \u5927 \u806a\u660e \u9006\u5e02 \u6284\u5e95 330 \u4ebf \uff0c \u4e00\u7bc7 \u7814\u62a5 \u5f15\u7206 \u5168\u7403 \uff0c \u5e02\u573a \u903b\u8f91 \u751f\u53d8 \uff1f\" \\\n      \"\u521a\u521a \u8fc7\u53bb \u7684 \u8fd9\u4e2a \u6708 \uff0c \u7f8e\u80a1 \u603b \u5e02\u503c \u66b4\u8dcc \u4e86 \u5c06\u8fd1 6 \u4e07\u4ebf\u7f8e\u5143 \uff08 \u6298\u5408 \u4eba\u6c11\u5e01 \u8d85\u8fc7 40 \u4e07\u4ebf \uff09 \uff0c \u8fd9 \u80cc\u540e \u7684 \u539f\u56e0 \u53ef\u80fd \u4e0d\u4ec5\u4ec5 \u662f \u52a0\u606f \u8fd9\u4e48 \u7b80\u5355 \u3002 \u6700\u8fd1 \u745e\u58eb \u4fe1\u8d37 \u77e5\u540d \u5206\u6790\u5e08 Zoltan   Polzsar \u64b0\u5199 \u4e86 \u4e00\u7bc7 \u6781\u5176\u91cd\u8981 \u7684 \u6587\u7ae0 \uff0c \u8be6\u7ec6\u5206\u6790 \u4e86 \u73b0\u6709 \u4e16\u754c\u79e9\u5e8f \u7684 \u5d29\u574f \u672c\u8d28 \u4ee5\u53ca \u7f8e\u56fd \u548c \u897f\u65b9 \u5c06\u8981 \u91c7\u53d6 \u7684 \u5e94\u5bf9 \u7b56\u7565 \u3002 \u5728 \u8be5\u6587 \u4e2d \uff0c Zoltan   Polzsar \u76f4\u6307 \u7f8e\u56fd \u901a\u80c0 \u7684 \u672c\u8d28 \u548c \u5176 \u957f\u671f\u6027 \u3002 \u540c\u671f \uff0c A\u80a1 \u5e02\u573a \u4ea6 \u51fa\u73b0 \u4e86 \u5927\u5e45 \u6740\u8dcc \u7684 \u60c5\u51b5 \u3002\"\n\n# Scoring using two files (line by line)\nrouge_chinese -f ./tests/hyp.txt ./ref.txt\n\n# Avg scoring - 2 files\nrouge_chinese -f ./tests/hyp.txt ./ref.txt --avg\n```\n\n",
    "bugtrack_url": null,
    "license": "LICENCE.txt",
    "summary": "Python ROUGE Score Implementation for Chinese Language Task (official rouge score)",
    "version": "1.0.3",
    "project_urls": {
        "Homepage": "https://github.com/Isaac-JL-Chen/rouge_chinese.git"
    },
    "split_keywords": [
        "nl",
        "cl",
        "natural language processing",
        "computational linguistics",
        "summarization",
        "chinese"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "030f394cf877be7b903881020ef7217f7dc644dad158d52a9353fcab22e3464d",
                "md5": "c0194ef62161bc1a7e153b3527f9f9e6",
                "sha256": "afda22cb64f9a0f1d7a19e88d7cd9acfd2c1f5d45bf463ade7ecadf87f30624d"
            },
            "downloads": -1,
            "filename": "rouge_chinese-1.0.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "c0194ef62161bc1a7e153b3527f9f9e6",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 21657,
            "upload_time": "2022-09-18T18:50:43",
            "upload_time_iso_8601": "2022-09-18T18:50:43.292199Z",
            "url": "https://files.pythonhosted.org/packages/03/0f/394cf877be7b903881020ef7217f7dc644dad158d52a9353fcab22e3464d/rouge_chinese-1.0.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "07a63e418f8106d3c1b84e2859aa2093c83cb082e4698b02450940cebbe39eac",
                "md5": "48c5afa9e9eb8410dd481cd942092b58",
                "sha256": "4074de21b01a83ca6032fe6d6354c5f618a305da60c994294133be2abf030f4a"
            },
            "downloads": -1,
            "filename": "rouge_chinese-1.0.3.tar.gz",
            "has_sig": false,
            "md5_digest": "48c5afa9e9eb8410dd481cd942092b58",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 21614,
            "upload_time": "2022-09-18T18:50:45",
            "upload_time_iso_8601": "2022-09-18T18:50:45.496168Z",
            "url": "https://files.pythonhosted.org/packages/07/a6/3e418f8106d3c1b84e2859aa2093c83cb082e4698b02450940cebbe39eac/rouge_chinese-1.0.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2022-09-18 18:50:45",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Isaac-JL-Chen",
    "github_project": "rouge_chinese",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "rouge-chinese"
}
        
Elapsed time: 0.12278s