"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df = pd.DataFrame(\n",
" [\n",
" [random.choice([\"ang\", \"polski\", \"hiszp\"]), np.random.geometric(0.2)]\n",
" for i in range(5000)\n",
" ],\n",
" columns=[\"język\", \"długość\"],\n",
")\n",
"fig = px.histogram(df, x=\"długość\", facet_row=\"język\", nbins=50, hover_data=df.columns)\n",
"fig.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ZADANIE 1 \n",
"\n",
"(40 punktów)\n",
"\n",
"ZNAJDŹ PRZYKŁAD TEKSTÓW Z TEJ SAMEJ DOMENY (1 000 000) słów albo nawet tłumaczenie :\n",
"- język angielski \n",
"- język polski\n",
"- inny język\n",
"\n",
"Proponowane narzędzia:\n",
"- nltk\n",
"- plotly express\n",
"- biblioteka collections\n",
"- spacy (niekoniecznie)\n",
"\n",
"\n",
"Dla każdego z języków:\n",
"- policz ilosć unikalnych (po sprowadzeniu do lowercase) słów (ze stemmingiem i bez)\n",
"- policz ilosć znaków\n",
"- policz ilosć unikalnych znaków\n",
"- policz ilosć zdań zdań\n",
"- policz ilosć unikalnych zdań\n",
"- podaj min, max, średnią oraz medianę ilości znaków w słowie \n",
"- podaj min, max, średnią oraz medianę ilości słów w zdaniu, znajdz najkrotsze i najdluzsze zdania\n",
"- wygeneruj word cloud (normalnie i po usunięciu stopwordów)\n",
"- wypisz 20 najbardziej popularnych słów (normalnie i po usunięciu stopwordów) (po sprowazdeniu do lowercase)\n",
"- wypisz 20 najbardziej popularnych bigramów (normalnie i po usunięciu stopwordów)\n",
"- narysuj wykres częstotliwości słów (histogram lub linie) w taki sposób żeby był czytelny, wypróbuj skali logarytmicznej dla osi x (ale na razie nie dla y), usuwanie słów poniżej limitu wystąpień itp.\n",
"- punkt jak wyżej, tylko dla bigramów\n",
"- punkt jak wyżej, tylko dla znaków\n",
"- narysuj wykres barplot dla części mowy (PART OF SPEECH TAGS, tylko pierwszy stopień zagłębienia)\n",
"- dla próbki 10000 zdań sprawdź jak często langdetect https://pypi.org/project/langdetect/ się myli i w jaki sposób.\n",
"- zilustruj prawo zipfa ( px.line z zaznaczonymi punktami)\n",
"- napisz wnioski (10-50 zdań)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### START ZADANIA"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### KONIEC ZADANIA"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"https://github.com/sdadas/polish-nlp-resources\n",
"\n",
"## Indeks czytelności Gunninga (*fog* – „mgła”)\n",
"\n",
"\n",
"Indeks czytelności Gunninga (*Gunning fog index*) ilustruje stopień trudności tekstu. Im wyższa liczba, tym trudniejszy jest tekst w odbiorze. Ze względu na charakterystyki różnych języków nie powinno się porównywać tekstów pisanych w różnych językach. Indeks służy do porównywania różnych tekstów w tym samym języku.\n",
"\n",
"$$FOG = 0.4\\left(\\frac{\\rm liczba\\ słów}{\\rm liczba\\ zdań} + 100 \\cdot \\left(\\frac{\\rm liczba\\ słów\\ skomplikowanych}{\\rm liczba\\ słów}\\right) \\right)$$\n",
"\n",
"Słowa skomplikowane mogą pochodzić ze specjalnej listy, a jeżeli nie ma takiej listy, to można przyjąć, że są to słowa składające sie z więcej niz 3 sylab (dla języka polskiego).\n",
"\n",
"https://en.wikipedia.org/wiki/Gunning_fog_index\n",
"\n",
"## Prawo Heapsa\n",
"\n",
"Prawo Heapsa to empiryczne prawo lingwistyczne. Stanowi, że liczba odmiennych słów rośnie wykładniczo (z wykładnikiem <1) względem długości dokumentu.\n",
"\n",
"Ilosć odmiennych słów $V_R$ względem całkowitej ilości słów w tekście $n$ można opisać wzorem:\n",
"$$V_R(n) = Kn^{\\beta},$$\n",
"gdzie $K$ i $\\beta$ to parametry wyznaczone empirycznie.\n",
"\n",
"Podobnie jak w przypadku indeksu czytelności Gunninga, nie powinno się porównywać różnych tekstów w różnych językach pod kątem prawa Heapsa.\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ZADANIE 2\n",
"\n",
"(50 punktów)\n",
"\n",
"Znajdź teksty w języku polskim (powinny składać sie po 5 osobnych dokumentów każdy, długości powinny być różne):\n",
"- tekst prawny\n",
"- tekst naukowy\n",
"- tekst z polskiego z powieści (np. wolne lektury)\n",
"- tekst z polskiego internetu (reddit, wykop, komentarze)\n",
"- transkrypcja tekstu mówionego\n",
"\n",
"Dla znalezionych tekstów:\n",
"- Zilustruj *Gunning fog index* (oś *y*) i średnią długość zdania (oś *x*) na jednym wykresie dla wszystkich tekstów. Domeny oznacz kolorami (`px.scatter`), dla języka polskiego traktuj jako wyrazy skomplikowane te powyżej 3 sylab, do liczenia sylab możesz użyć https://pyphen.org/ \n",
"- Zilustruj prawo Heapsa dla wszystkich tekstów na jednym wykresie, domeny oznacz kolorami (`px.scatter`).\n",
"- Napisz wnioski (10-50 zdań).\n",
"\n",
"\n",
"#### START ZADANIA\n",
"\n",
"#### KONIEC ZADANIA"
]
}
],
"metadata": {
"author": "Jakub Pokrywka",
"email": "kubapok@wmi.amu.edu.pl",
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"lang": "pl",
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.12"
},
"subtitle": "0.Informacje na temat przedmiotu[ćwiczenia]",
"title": "Ekstrakcja informacji",
"year": "2021"
},
"nbformat": 4,
"nbformat_minor": 4
}