oroszgy commited on
Commit
e2e35eb
1 Parent(s): 0a2bb86

Improved keyphrase extraction by PoS filtering and IDF scores

Browse files
examples/common.py CHANGED
@@ -1,3 +1,55 @@
 
 
 
 
1
  import spacy
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
- NLP = spacy.load("hu_core_news_lg")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- from examples.common import NLP
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, "Probability": prob}
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=EXAMPLES[0], lines=10, label="Input text", show_label=True),
45
  outputs=gr.DataFrame(label="Keywords", show_label=False, max_cols=2, max_rows=10),
46
- examples=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