Spaces:
Runtime error
Runtime error
Improved keyphrase extraction by PoS filtering and IDF scores
Browse files- examples/common.py +53 -1
- examples/keyphrases.py +8 -31
- resources/freq.list +0 -0
examples/common.py
CHANGED
@@ -1,3 +1,55 @@
|
|
|
|
|
|
|
|
|
|
1 |
import spacy
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import math
|
2 |
+
from pathlib import Path
|
3 |
+
from typing import Dict, List
|
4 |
+
|
5 |
import spacy
|
6 |
+
from spacy import Language
|
7 |
+
|
8 |
+
NLP: Language = spacy.load("hu_core_news_lg")
|
9 |
+
|
10 |
+
|
11 |
+
def _compute_idf(freq_file: Path) -> Dict[str, float]:
|
12 |
+
freqs: Dict[str, int] = {}
|
13 |
+
with freq_file.open() as f:
|
14 |
+
for line in f:
|
15 |
+
line = line.strip()
|
16 |
+
data: List[str] = line.split()
|
17 |
+
if len(data) == 0:
|
18 |
+
continue
|
19 |
+
word: str = data[0]
|
20 |
+
freq: int = int(data[-1])
|
21 |
+
if not line.isalpha():
|
22 |
+
freqs[word] = freq
|
23 |
+
max_freq: int = freqs["a"]
|
24 |
+
idfs: Dict[str, float] = {w: math.log2(max_freq / (float(f) + 1)) + 1 for w, f in freqs.items()}
|
25 |
+
return idfs
|
26 |
+
|
27 |
|
28 |
+
IDF: Dict[str, float] = _compute_idf(Path(__file__).parent.parent / "resources" / "freq.list")
|
29 |
+
NEWS_EXAMPLES = [
|
30 |
+
"""A magyar futballválogatott negyedik Nemzetek Ligája mérkőzésén másodszor nyert, a hazai 1-0-s siker után idegenben 4-0-val megsemmisítette Angliát. Nagy győzelem volt, az enervált angolokat a saját közönségük fütyülte ki, miután a második félidőben el sem találták a kaput. 96 éve nem kaptak ekkora verést az angolok hazai pályán.
|
31 |
+
Az angol kapitány, Gareth Southgate kilenc helyen változtatott azon a csapaton, amelyik az olaszok ellen gól nélküli döntetlent játszott szombaton. Marco Rossi a kapuban cserélt, Dibusz Dénes állt a gólvonalon, Schäfer András visszatért a középpályára, miután a németek ellen letöltötte eltiltását. A 3-4-2-1-es felállás ezúttal sem változott. Ha végig akarja nézni helyszíni közvetítésünket, mit műveltek az angolok a Himnusz alatt, itt megteheti.
|
32 |
+
Az első helyzetre a hatodik percig kellett várni, akkor Kane passzából James húzott el a bal oldalon, középre adta a labdát, Bowen fejelt, Nagy Zsolt a helyén volt, és mentett.
|
33 |
+
Az első magyar lövés rögtön a kapuban landolt.
|
34 |
+
Szoboszlai ívelt be szabadrúgást a tizenhatoson belülre, Lang és Stone ugrott fel fejelni, a magyar védő megelőzte ellenfelét. A labda Kane talpa alatt elcsúszott, Sallai combbal átvette, azonnal lőtt 7 méterről, mielőtt még Phillips odaért volna, Ramsdale ugyan beleért, de kiütni már nem tudta. Szoboszlainak volt egy másik, sokkal közelebbről elvégzett szabadrúgása, amit igen veszélyesen lőtt be a kapu elé, James a gólvonalról mentett, Szalai Attila elől. A kipattanóból az angolok egy gyors kontrát vezettek, de a magyar tízes visszafutott, és a tizenhatoson belül szerelni tudott.
|
35 |
+
A magyar válogatott nem volt nagy nyomás alatt, az angolok akkor jártak legközelebb a gólhoz, amikor Orbán a 36. percben a saját kapuja felé fejelt, de Dibusz akkor is a helyén volt. A hazai szögletek veszélyesek voltak, de egyik sem annyira, hogy a szívünkhöz kellett volna kapnunk.
|
36 |
+
A második félidőben az angolok felgyorsították a játékukat, de igazán komoly helyzetet nem tudtak kialakítani, Rossi pedig már az 55. percben érezte, hogy frissíteni kell, és Szoboszlai helyére Gazdag, Styles helyére pedig Nagy Ádám állt.
|
37 |
+
Mivel a válogatott visszaállt, és fegyelmezetten zárta le a területeket, az angolok ötlettelen, olykor lassú adogatása veszélytelen volt. A csapat ezúttal is igazolta, mennyire képes megnehezíteni, megkeseríteni a riválisai dolgát.
|
38 |
+
A hajrában jött a varázslat Most azonban azt is igazolta, hogy egy pillanat alatt a kapu elé tud kerülni. A Szalai helyére beálló Ádám Martin megharcolt egy labdáért, megtartotta a térfél közepén, majd tökéletesen szöktette Sallait, aki a tizenhatoson belül állítgatás nélkül jobb külsővel elrúgta a labdát Ramsdale lába mellett.
|
39 |
+
A 77. percben Kane használható labdát kapott a szélről, kilenc méterről fejelt, a kapufáról pattant vissza a labda a mezőnybe, a center megpróbálta átvenni, de másodszorra már nem tudta, így odalett a helyzet. A 81. percben Magyarország berúgta a harmadik gólt.
|
40 |
+
Nego fejesét még hárították a védők, a kipattanót készítette le Ádám Martin a támadást kísérő Nagy Zsolt elé, aki 17 méterről külsővel, állítgatás nélkül, pazarul lőtte ki a jobb alsó sarkot. A 29 éves felcsúti védő ennek a 11 napnak a legnagyobb felfedezettje, mert a németek ellen is eredményes volt szombaton.
|
41 |
+
Stonest a hajrában még kiállították, a mieink nem törekedtek még jobban a gólkülönbség javítására, de magabiztosan passzolgattak, így Angliának esélye sem volt a szépítésre, miután alig volt náluk a labda. Hogy teljes legyen az angol KO, arról Gazdag Dániel gondoskodott, amikor egy nagy sprint után lazán átpörgette a labdát a kimozduló kapus felett.
|
42 |
+
Ha Anglia nem is veszi komolyan ezt a sorozatot, mert a novemberi vb-re készül, és egy fárasztó szezon végén már a legszívesebben pihennének a klasszisai, négy gólt biztosan nem akart kapni, mert így könnyen ki is eshetnek az A divízióból. Tavaly szeptemberben Eb-selejtezőn Anglia ugyanilyen arányban verte a mieinket a Puskás Arénában, ez most egy méltó visszavágás volt.
|
43 |
+
A csoport másik meccsén a németek 5-2-vel küldték haza az olaszokat, és ezzel feljöttek a második helyre.""",
|
44 |
+
"""A megszokott menetrenden kívül és váratlanul nagy mértékben emelt a jegybank az irányadó rátán. A forint a hírre 395 alá erősödött az euróval szemben.
|
45 |
+
7,25 százalékos kamattal hirdette meg a Magyar Nemzeti Bank (MNB) az egyhetes betéti tenderét – derül ki a jegybank által közzétett adatokból. Az egyhetes betét azt jelenti, hogy a bankok ezzel a rátával parkoltathatják a pénzüket egy hétig az MNB-ben. Mivel az egyhetes betéti eszköz kamata jelenleg magasabb, mint az alapkamat, valójában ez az irányadó ráta.
|
46 |
+
A kamatemelés váratlan, mind időzítését, mind mértékét tekintve. A jegybank ugyan kommunikációja szerint nyitva tartja a lehetőségét, hogy bármikor emeljen az egyhetes betét kamatán, azon a Monetáris Tanács havi kamatdöntő ülései után szokott emelni. A cél az, hogy idővel az alapkamat és az egyhetes betét kamata újra összezárjon. A kamatemelés így a bevett menetrenden kívüli. A mértéke is nagyobb a megszokottnál, az emelés 0,5 százalékpontos, miközben a jegybank egy ideje 0,3 százalékpontos lépésekkel haladt felfelé. Legutóbb márciusban volt 0,5 százalékpontos emelés, ekkor a ráta 5,35 százalékról 5,85 százalékra nőtt.
|
47 |
+
A Monetáris Tanács legutóbb május végén emelt az alapkamat szintjén, 5,4-ről 5,9 százalékra. Addig kell a kamatokat emelni, amíg az szükséges, hogy az inflációs célt fenntartható módon el tudjuk érni – mondta Virág Barnabás alelnök az alapkamat-emelés után. Az alelnök szerint a következő hónapokban várhatóan még tovább nő az infláció az áprilisi 9,5 százalékról, Virág elhúzódó infláció elleni harcot, a szigorúbb monetáris kondíciók tartós fenntartását ígérte.
|
48 |
+
A forint árfolyama mindenesetre jól reagált az egyhetesbetétkamat-emelésre, az euróval szemben a napi nyitó árfolyam 397,5 környékéről 395 alá erősödött. A megelőző napokban a forint sorra döntögette a negatív árfolyamrekordokat, az euróval szemben többször 400 fölött is járt. Jelenleg a történelmi mélypont 402,96.
|
49 |
+
""",
|
50 |
+
"""Jövőre nem lesz "ledolgozós" hétvége
|
51 |
+
2023-ban egyetlen szombati munkanap sem lesz.
|
52 |
+
Jövőre kétszer (húsvétkor és karácsonykor) lesz négynapos a hétvége. Emellett négyszer lesz háromnapos hosszú hétvége, mivel május 1-én, pünkösdkor, október 23-án, és az újévkor is egy-egy hétfővel bővülnek majd a hétvégi szabadnapok - ezt Koncz Zsófia, a Technológiai és Ipari Minisztérium új parlamenti államtitkára közölte egy Facebook-bejegyzésben, hangsúlyozva, hogy a munkarendet meghatározó minisztériumuk úgy döntött, hogy 2023-ban egyetlen egynapos, "ledolgozós” hétvége sem lesz.
|
53 |
+
Hogy mennyit ér egy munkanap, arról csak becsléseket lehet készíteni, és a statisztikusok legszívesebben erről is lebeszélnék a kísérletező kedvűeket. Nagyon leegyszerűsítve mondhatjuk azt: a GDP-t leosztva a munkanapok számával 160 milliárd forintot ér egy munkanap, de akkor még azt sem vettük figyelembe, hogy van munka azért hétvégéken is.
|
54 |
+
"""
|
55 |
+
]
|
examples/keyphrases.py
CHANGED
@@ -1,48 +1,25 @@
|
|
1 |
from typing import List, Tuple
|
2 |
|
3 |
-
import pandas as pd
|
4 |
import gradio as gr
|
5 |
-
|
6 |
from textacy.extract.keyterms.sgrank import sgrank as keywords
|
7 |
|
|
|
|
|
8 |
|
9 |
def process(text: str) -> pd.DataFrame:
|
10 |
doc = NLP(text)
|
11 |
-
terms: List[Tuple[str, float]] = keywords(doc, topn=10)
|
12 |
term_set = [t for t, _ in terms]
|
13 |
-
return pd.DataFrame([{"Keyphrase": term, "
|
14 |
for term, prob in terms
|
15 |
if all(other == term or term not in other for other in term_set)])
|
16 |
|
17 |
|
18 |
-
EXAMPLES = [
|
19 |
-
"""Az elfogadott lengyel helyreállítási terv még jobban izolálja Magyarországot, gazdasági és politikai szempontból egyaránt. Mint megtudtuk, hiába mondta még márciusban Orbán, hogy a hitelrészt is kérjük az uniós pénzekből, a korábban benyújtott terveket egyelőre nem módosítottuk.
|
20 |
-
Lengyelország tavaly májusban adta be nemzeti helyreállítási tervét és idén június 1-jén kapta meg rá az Európai Bizottság jóváhagyását. Az uniós tagállamok 2020 decemberében döntötték el – a jogállamiság miatti lengyel és magyar vétófenyegetés feloldásával –, hogy egy 750 milliárd eurós alapot hoznak létre, hogy segítse a koronavírus utáni gazdasági talpráállást. Minden tagállamnak el kell készítenie a felhasználásra vonatkozó tervét, amelynek tartalmazni kell, hogy mekkora vissza nem térítendő támogatásra és mekkora hitelre tart igényt. Ezek természetesen maximált keretek. A lengyel „gazdaságélénkítési és ellenállóképesség-növelési” program értéke 35,4 milliárd euró: 23,9 milliárd támogatás és 11,5 milliárd kölcsön.
|
21 |
-
Lengyelország esetében azért húzódott ilyen sokáig az eljárás, mert előbb az Európai Bizottság, majd pedig az Európai Bíróság is úgy találta, hogy a lengyel igazságszolgáltatási reform ellentétes az uniós joggal, elsősorban az úgynevezett fegyelmi kamara miatt, amelyben túl nagy befolyása van a kormánypártnak. Ezt az akadályt kellett elhárítani, hogy meginduljanak az uniós pénzek útjából, az ehhez szükséges jogszabályt pedig a múlt héten hozták meg a lengyelek. Az Európai Bizottságnak tehát nem konkrétan a lengyel tervvel volt gondja, hanem azzal, hogy az uniós pénzek elköltésének ellenőrzését egy politikailag befolyásolt bíróság végzi el.
|
22 |
-
Ahhoz azonban, hogy a lengyelek pénzt kapjanak, további feltételeknek is meg kell felelniük, a jóváhagyó döntésében a brüsszeli testület többek közt három mérföldkövet jelölt meg:
|
23 |
-
a bírák fegyelmi rendszerének reformja, új testület létrehozásával és a fegyelmi felelősség új alapjaival – határidő 2022 második negyedév,
|
24 |
-
a Legfelsőbb Bíróság Fegyelmi Kollégiumának határozataival érintett bírák ügyeinek felülvizsgálati eljárása – határidő 2022 második negyedév,
|
25 |
-
utólagos ellenőrzés a felülvizsgálati eljárás befejezésének biztosítására – határidő 2022 negyedik negyedév.
|
26 |
-
Vagyis a jogellenesen felállított fegyelmi kamara bírákkal szembeni összes ügyét külön bíróság elé kell terjeszteni, amelynek pártatlannak kell lennie. Azt is rögzítették, hogy a bírák nem vonhatók fegyelmi felelősségre azért, mert kérdéseket tettek fel az Európai Bíróságnak és az általuk meghozott döntések tartalmáért sem.
|
27 |
-
Az első feltételt teljesítették, a másodiknak még ebben a hónapban eleget kell tenni. Ennek azért van jelentősége, mert csak akkor lehet kifizetési igényt előterjeszteni, ha az első két pontban írtak megvalósultak. Mindezt a lengyel kormány vállalta, így a keretből idén várhatóan 4 milliárd eurót fognak kapni.
|
28 |
-
Ami pedig a konkrét terveket illeti: 49 reformot és 53 beruházási projektet tartalmaz a dosszié, a források 42,7 százalékát az éghajlatváltozás elleni küzdelemre, 21,3 százalékát a digitális átállásra fordítják. Mindezzel reményeik szerint 105 000 munkahelyet teremtenek és a következő húsz évben a GDP 15 százalékos növekedését érik el.
|
29 |
-
Az eljárás hivatalos folytatása az, hogy a tagállamok négy héten belül jóváhagyják a bizottsági ajánlást. Az EUrologus figyelmét uniós források arra hívták fel, hogy ez a helyzet legalább két szempontból igen előnyös a lengyelek számára:
|
30 |
-
További mintegy 25 milliárd euró válik elérhetővé számukra, amely részben a fel nem használt hitelrészt, részben pedig az ide becsatornázott és az orosz energiáról való leválást szolgáló REPowerEU nevű alapból rájuk eső részt jelenti,
|
31 |
-
Ha a feltételeket rendben teljesítik, akkor megszűnik az ok, amiért a 7-es cikkely szerinti eljárást velük szemben folytatják. Tovább gondolva: ha ebből kikerül Lengyelország, akkor vége lesz a Magyarországgal eddig fenntartott dacszövetségnek. Tehát az EU képes lehet a legsúlyosabb szankciókat is meghozni, ha a magyar kormány továbbra is sérti a jogállamisági elveket, mert a lengyelek nem fognak pusztán azért vétózni, mert hasonló helyzetben a magyarok is vétóznának a javukra.
|
32 |
-
Ami egyébként a magyar helyreállítási tervet illeti: bizottsági tisztviselőktől úgy értesültünk, hogy a tárgyalások továbbra is folynak a jogszabályban meghatározott kritériumok alapján. Forrásunk ugyanakkor egyértelműen kijelentette, hogy a magyar tervet nem módosították az elmúlt hónapokban. Ez azért fontos, mert a magyar kormány eredetileg – tavaly áprilisban – csak a vissza nem térítendő – akkori árfolyamon számolva – 2500 milliárd forintra pályázott, de idén márciusban Orbán Viktor azt mondta, hogy a 3300 milliárd forintos hitelre is igényt tartana. Ehhez azonban módosítani kellene a tervet, de ez nem történt meg. Ráadásul ami tavaly még 2500 milliárd forint volt, az mostanra csak 2000. A vártnál kisebb gazdasági visszaesés és a robusztus növekedés miatt ugyanis kiigazították az arányokon alapuló számokat, ami mínusz 1,3 milliárd eurót jelentett. Ennek az összegnek a 70 százaléka pedig napról napra nagyobb veszélyben van. Ha ugyanis ez év végéig nem fogadják el a tagállamok a magyar tervet a bizottsági ajánlás alapján, akkor a lehívható vissza nem térítendő összeg 70 százaléka elvész – így szól a jogszabály.
|
33 |
-
A bizottsági jóváhagyást követően egy hónappal dönt a Tanács, majd két hónap áll rendelkezésre a szerződés véglegesítésére a Bizottság számára. Ez már három hónap és figyelembe kell venni a nyári szünetet is…
|
34 |
-
""",
|
35 |
-
"""Jövőre nem lesz "ledolgozós" hétvége
|
36 |
-
2023-ban egyetlen szombati munkanap sem lesz.
|
37 |
-
Jövőre kétszer (húsvétkor és karácsonykor) lesz négynapos a hétvége. Emellett négyszer lesz háromnapos hosszú hétvége, mivel május 1-én, pünkösdkor, október 23-án, és az újévkor is egy-egy hétfővel bővülnek majd a hétvégi szabadnapok - ezt Koncz Zsófia, a Technológiai és Ipari Minisztérium új parlamenti államtitkára közölte egy Facebook-bejegyzésben, hangsúlyozva, hogy a munkarendet meghatározó minisztériumuk úgy döntött, hogy 2023-ban egyetlen egynapos, "ledolgozós” hétvége sem lesz.
|
38 |
-
Hogy mennyit ér egy munkanap, arról csak becsléseket lehet készíteni, és a statisztikusok legszívesebben erről is lebeszélnék a kísérletező kedvűeket. Nagyon leegyszerűsítve mondhatjuk azt: a GDP-t leosztva a munkanapok számával 160 milliárd forintot ér egy munkanap, de akkor még azt sem vettük figyelembe, hogy van munka azért hétvégéken is.
|
39 |
-
"""
|
40 |
-
]
|
41 |
-
|
42 |
demo = gr.Interface(
|
43 |
fn=process,
|
44 |
-
inputs=gr.Textbox(value=
|
45 |
outputs=gr.DataFrame(label="Keywords", show_label=False, max_cols=2, max_rows=10),
|
46 |
-
examples=
|
47 |
-
cache_examples=True,
|
48 |
)
|
|
|
1 |
from typing import List, Tuple
|
2 |
|
|
|
3 |
import gradio as gr
|
4 |
+
import pandas as pd
|
5 |
from textacy.extract.keyterms.sgrank import sgrank as keywords
|
6 |
|
7 |
+
from examples.common import NLP, IDF, NEWS_EXAMPLES
|
8 |
+
|
9 |
|
10 |
def process(text: str) -> pd.DataFrame:
|
11 |
doc = NLP(text)
|
12 |
+
terms: List[Tuple[str, float]] = keywords(doc, topn=10, include_pos=("NOUN", "PROPN"), idf=IDF, ngrams=(1, 2, 3))
|
13 |
term_set = [t for t, _ in terms]
|
14 |
+
return pd.DataFrame([{"Keyphrase": term, "Score": prob}
|
15 |
for term, prob in terms
|
16 |
if all(other == term or term not in other for other in term_set)])
|
17 |
|
18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
demo = gr.Interface(
|
20 |
fn=process,
|
21 |
+
inputs=gr.Textbox(value=NEWS_EXAMPLES[0], lines=10, label="Input text", show_label=True),
|
22 |
outputs=gr.DataFrame(label="Keywords", show_label=False, max_cols=2, max_rows=10),
|
23 |
+
examples=NEWS_EXAMPLES,
|
24 |
+
# cache_examples=True,
|
25 |
)
|
resources/freq.list
ADDED
The diff for this file is too large to render.
See raw diff
|
|