From d082822506cef5a1958f2278aff036589b6f9792 Mon Sep 17 00:00:00 2001 From: Ayub Date: Mon, 6 Nov 2023 12:06:14 +0330 Subject: [PATCH] add pn-summary reader --- .../hazm/corpus_readers/pn_summary_reader.md | 1 + hazm/__init__.py | 1 + hazm/corpus_readers/__init__.py | 1 + hazm/corpus_readers/pn_summary_reader.py | 51 +++++++++++++++++++ mkdocs.yml | 1 + .../corpus_readers/test_pn_summary_reader.py | 8 +++ 6 files changed, 63 insertions(+) create mode 100644 documentation/content/hazm/corpus_readers/pn_summary_reader.md create mode 100644 hazm/corpus_readers/pn_summary_reader.py create mode 100644 tests/corpus_readers/test_pn_summary_reader.py diff --git a/documentation/content/hazm/corpus_readers/pn_summary_reader.md b/documentation/content/hazm/corpus_readers/pn_summary_reader.md new file mode 100644 index 00000000..6738d113 --- /dev/null +++ b/documentation/content/hazm/corpus_readers/pn_summary_reader.md @@ -0,0 +1 @@ +::: hazm.corpus_readers.pn_summary_reader \ No newline at end of file diff --git a/hazm/__init__.py b/hazm/__init__.py index 4d8f8573..c056d136 100644 --- a/hazm/__init__.py +++ b/hazm/__init__.py @@ -67,6 +67,7 @@ def word_tokenize(sentence: str) -> List[str]: from hazm.corpus_readers import NaabReader from hazm.corpus_readers import ArmanReader from hazm.corpus_readers import FaSpellReader +from hazm.corpus_readers import PnSummaryReader from hazm.dependency_parser import DependencyParser diff --git a/hazm/corpus_readers/__init__.py b/hazm/corpus_readers/__init__.py index e57c3ba2..3e6b691f 100644 --- a/hazm/corpus_readers/__init__.py +++ b/hazm/corpus_readers/__init__.py @@ -20,3 +20,4 @@ from .naab_reader import NaabReader from .arman_reader import ArmanReader from .faspell_reader import FaSpellReader +from .pn_summary_reader import PnSummaryReader diff --git a/hazm/corpus_readers/pn_summary_reader.py b/hazm/corpus_readers/pn_summary_reader.py new file mode 100644 index 00000000..3cd3bee0 --- /dev/null +++ b/hazm/corpus_readers/pn_summary_reader.py @@ -0,0 +1,51 @@ +"""این ماژول شامل کلاس‌ها و توابعی برای خواندن پیکرهٔ pn-summary است. + +پیکرهٔ [pn-summary](https://github.com/hooshvare/pn-summary) با هدف کمک به سیستم‌های یادگیری عمیق و ساخت مدل‌های بهتر برای خلاصه‌سازی دقیق‌تر متن‌های فارسی تهیه شده است. این پیکره شامل ۹۳,۲۰۷ متن خبری تمیزشده است که از ۶ خبرگزاری فارسی و از میان حدوداً ۲۰۰ هزار خبر استخراج شده است. +""" +import csv +from pathlib import Path +from typing import Iterator +from typing import List +from typing import Tuple + + +class PnSummaryReader: + """این کلاس شامل توابعی برای خواندن پیکرهٔ pn-summary است. + + Args: + corpus_folder: مسیر فولدر حاوی فایل‌های پیکره. + subset: نوع دیتاست: `test` یا `train` یا `dev` + """ + + def __init__(self: "PnSummaryReader", corpus_folder: str, subset: str="train") -> None: + self._file_paths=Path(corpus_folder).glob(f"{subset}*.csv") + + def docs(self: "PnSummaryReader") -> Iterator[Tuple[str, str, str, str, str, List[str], str, str]]: + """خبرها را یک‌به‌یک برمی‌گرداند. + + Examples: + >>> pn_summary = PnSummaryReader("pn-summary", "test") + >>> next(pn_summary.docs()) + ( + 'ff49386698b87be4fc3943bd3cf88987157e1d47', + 'کاهش ۵۸ درصدی مصرف نفت کوره منطقه سبزوار', + 'مدیر شرکت ملی پخش فرآورده‌های نفتی منطقه سبزوار به خبرنگار شانا، گفت..., + 'مصرف نفت کوره منطقه سبزوار در بهار امسال، نسبت به مدت مشابه پارسال، ۵۸ درصد کاهش یافت.', + 'Oil-Energy', + ['پالایش و پخش'], + 'Shana', + 'https://www.shana.ir/news/243726/%DA%A9%D8%A7%D9%87%D8...' + ) + + Yields: + خبر بعدی در قالب `(شناسه, عنوان, متن خبر ,خلاصهٔ خبر, موضوع خبر به انگلیسی, [موضوع ۱ به فارسی، موضوع ۲ به فارسی، ...], منبع, لینک)` + """ + for file_path in self._file_paths: + with Path(file_path).open("r", encoding="utf-8") as file: + reader = csv.reader(file, delimiter="\t") + next(reader) # Skip the header row + + for row in reader: + _id, title, article, summary, category, categories, network, link = (field.strip() for field in row) + categories = categories.split("+") + yield (_id, title, article, summary, category, categories, network, link) diff --git a/mkdocs.yml b/mkdocs.yml index 0f463fca..c7c2f5e0 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -112,6 +112,7 @@ nav: - naab_reader: content/hazm/corpus_readers/naab_reader.md - arman_reader: content/hazm/corpus_readers/arman_reader.md - faspell_reader: content/hazm/corpus_readers/faspell_reader.md + - pn_summary_reader: content/hazm/corpus_readers/pn_summary_reader.md - کاربردهای هضم: - content/samples/index.md diff --git a/tests/corpus_readers/test_pn_summary_reader.py b/tests/corpus_readers/test_pn_summary_reader.py new file mode 100644 index 00000000..dc71fe22 --- /dev/null +++ b/tests/corpus_readers/test_pn_summary_reader.py @@ -0,0 +1,8 @@ +from hazm import PnSummaryReader + + +def test_docs(): + pn_summary = PnSummaryReader("tests/files/pn-summary","test") + sentence = next(pn_summary.docs()) + expected = ("ff49386698b87be4fc3943bd3cf88987157e1d47", "کاهش ۵۸ درصدی مصرف نفت کوره منطقه سبزوار", "مدیر شرکت ملی پخش فرآورده\u200cهای نفتی منطقه سبزوار به خبرنگار شانا، گفت: مصرف نفت کوره این منطقه به دلیل توسعه شبکه گاز طبیعی در سه ماه نخست امسال، \u200c با ۵۸ درصد کاهش نسبت به مدت مشابه سال پیش، به ۳۷۰ هزار لیتر رسیده است. [n] عیسی افتخاری سهم بنزین مصرفی این منطقه را نیز در بازه زمانی یاد شده ۳۸ میلیون و ۹۷۵ هزار لیتر اعلام و اظهار کرد: این مقدار از افزایش چهار درصدی مصرف این سوخت در قیاس با بهار پارسال حکایت دارد. [n] به گفته وی، در ۹۳ روز نخست امسال، ۴۶ میلیون و ۲۳۶ هزار لیتر نفت گاز در منطقه سبزوار مصرف شده که نسبت به مدت مشابه سال پیش، با افزایش نیم درصدی همراه شده است. [n] مدیر شرکت ملی پخش فرآورده\u200cهای نفتی منطقه سبزوار همچنین، از مصرف سه میلیون و ۹۵۹ هزار لیتر نفت سفید در این منطقه خبر داد و افزود: مصرف این سوخت در قیاس با سه ماه نخست پارسال، ۲۶ درصد کاهش یافته است. [n] افتخاری تصریح کرد: مجموع مصرف انواع فرآورده نفتی منطقه سبزوار در نخستین فصل امسال، با یک درصد کاهش نسبت به مدت مشابه پارسال، به ۸۹ میلیون و ۵۴۱ هزار لیتر رسیده است. [n] وی یادآور شد: در ۹۳ روز نخست امسال، مصرف گاز طبیعی فشرده (سی ان جی) در منطقه سبزوار، با ۳٫۵ درصد افزایش نسبت به مدت زمان یاد شده در سال پیش، به ۱۰ میلیون و ۶۰۰ هزار مترمکعب رسیده است.", "مصرف نفت کوره منطقه سبزوار در بهار امسال، نسبت به مدت مشابه پارسال، ۵۸ درصد کاهش یافت.", "Oil-Energy", ["پالایش و پخش"], "Shana", "https://www.shana.ir/news/243726/%DA%A9%D8%A7%D9%87%D8%B4-58-%D8%AF%D8%B1%D8%B5%D8%AF%DB%8C-%D9%85%D8%B5%D8%B1%D9%81-%D9%86%D9%81%D8%AA-%DA%A9%D9%88%D8%B1%D9%87-%D9%85%D9%86%D8%B7%D9%82%D9%87-%D8%B3%D8%A8%D8%B2%D9%88%D8%A7%D8%B1") + assert sentence == expected