Russian Texts Statistics (ruTS)
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊ ΠΈΠ· ΡΠ΅ΠΊΡΡΠΎΠ² Π½Π° ΡΡΡΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ:
$ pip install ruts
ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
- python 3.8+
- nltk
- pymorphy2
- razdel
- scipy
- spaCy
- numpy
- pandas
- matplotlib
- graphviz
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» Π±Π°Π·ΠΈΡΡΠ΅ΡΡΡ Π½Π° Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π΄Π»Ρ ΡΡΡΡΠΊΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ textacy ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠ°ΠΊ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Ρ ΡΠ΅ΠΊΡΡΠ°ΠΌΠΈ, ΡΠ°ΠΊ ΠΈ Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠΌΠΈ Doc-ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ spaCy.
API Π΄Π»Ρ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Π° Ρ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ.
ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ²ΠΎΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΡΠ»ΠΎΠ² ΠΈΠ· ΡΠ΅ΠΊΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΡΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΠΊ.
ΠΡΠΈΠΌΠ΅Ρ:
import re
from nltk.corpus import stopwords
from ruts import SentsExtractor, WordsExtractor
text = "ΠΠ΅ ΠΈΠΌΠ΅ΠΉ 100 ΡΡΠ±Π»Π΅ΠΉ, Π° ΠΈΠΌΠ΅ΠΉ 100 Π΄ΡΡΠ·Π΅ΠΉ"
se = SentsExtractor(tokenizer=re.compile(r', '))
se.extract(text)
('ΠΠ΅ ΠΈΠΌΠ΅ΠΉ 100 ΡΡΠ±Π»Π΅ΠΉ', 'Π° ΠΈΠΌΠ΅ΠΉ 100 Π΄ΡΡΠ·Π΅ΠΉ')
we = WordsExtractor(use_lexemes=True, stopwords=stopwords.words('russian'), filter_nums=True, ngram_range=(1, 2))
we.extract(text)
('ΠΈΠΌΠ΅ΡΡ', 'ΡΡΠ±Π»Ρ', 'ΠΈΠΌΠ΅ΡΡ', 'Π΄ΡΡΠ³', 'ΠΈΠΌΠ΅ΡΡ_ΡΡΠ±Π»Ρ', 'ΡΡΠ±Π»Ρ_ΠΈΠΌΠ΅ΡΡ', 'ΠΈΠΌΠ΅ΡΡ_Π΄ΡΡΠ³')
we.get_most_common(3)
[('ΠΈΠΌΠ΅ΡΡ', 2), ('ΡΡΠ±Π»Ρ', 1), ('Π΄ΡΡΠ³', 1)]
ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ° ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ:
- ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ
- ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»ΠΎΠ²
- ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΡ ΡΠ»ΠΎΠ²
- ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π»ΠΈΠ½Π½ΡΡ ΡΠ»ΠΎΠ²
- ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠ»ΠΎΠ²
- ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΡΡΡ ΡΠ»ΠΎΠ²
- ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠ΄Π½ΠΎΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠ»ΠΎΠ²
- ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠ»ΠΎΠ²
- ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²
- ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±ΡΠΊΠ²
- ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ²
- ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»ΠΎΠ³ΠΎΠ²
- ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π½Π°ΠΊΠΎΠ² ΠΏΡΠ΅ΠΏΠΈΠ½Π°Π½ΠΈΡ
- ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ»ΠΎΠ² ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ Π±ΡΠΊΠ²
- ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ»ΠΎΠ² ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΡΠ»ΠΎΠ³ΠΎΠ²
ΠΡΠΈΠΌΠ΅Ρ:
from ruts import BasicStats
text = "Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΡΠΈ Π²ΠΈΠ΄Π° Π»ΠΆΠΈ: Π»ΠΎΠΆΡ, Π½Π°Π³Π»Π°Ρ Π»ΠΎΠΆΡ ΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°"
bs = BasicStats(text)
bs.get_stats()
{'c_letters': {1: 1, 3: 2, 4: 3, 6: 1, 10: 2},
'c_syllables': {1: 5, 2: 1, 3: 1, 4: 2},
'n_chars': 55,
'n_complex_words': 2,
'n_letters': 45,
'n_long_words': 3,
'n_monosyllable_words': 5,
'n_polysyllable_words': 4,
'n_punctuations': 2,
'n_sents': 1,
'n_simple_words': 7,
'n_spaces': 8,
'n_syllables': 18,
'n_unique_words': 8,
'n_words': 9}
bs.print_stats()
Π‘ΡΠ°ΡΠΈΡΡΠΈΠΊΠ° | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅
------------------------------
ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ | 1
Π‘Π»ΠΎΠ²Π° | 9
Π£Π½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ ΡΠ»ΠΎΠ²Π° | 8
ΠΠ»ΠΈΠ½Π½ΡΠ΅ ΡΠ»ΠΎΠ²Π° | 3
Π‘Π»ΠΎΠΆΠ½ΡΠ΅ ΡΠ»ΠΎΠ²Π° | 2
ΠΡΠΎΡΡΡΠ΅ ΡΠ»ΠΎΠ²Π° | 7
ΠΠ΄Π½ΠΎΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΠ»ΠΎΠ²Π° | 5
ΠΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΠ»ΠΎΠ²Π° | 4
Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ | 55
ΠΡΠΊΠ²Ρ | 45
ΠΡΠΎΠ±Π΅Π»Ρ | 8
Π‘Π»ΠΎΠ³ΠΈ | 18
ΠΠ½Π°ΠΊΠΈ ΠΏΡΠ΅ΠΏΠΈΠ½Π°Π½ΠΈΡ | 2
ΠΠ΅ΡΡΠΈΠΊΠΈ ΡΠ΄ΠΎΠ±ΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΡΠΈΡΠ»ΡΡΡ Π΄Π»Ρ ΡΠ΅ΠΊΡΡΠ° ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ ΡΠ΄ΠΎΠ±ΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ:
- Π’Π΅ΡΡ Π€Π»Π΅ΡΠ°-ΠΠΈΠ½ΠΊΠ°ΠΉΠ΄Π°
- ΠΠ½Π΄Π΅ΠΊΡ ΡΠ΄ΠΎΠ±ΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ Π€Π»Π΅ΡΠ°
- ΠΠ½Π΄Π΅ΠΊΡ ΠΠΎΠ»ΠΌΠ°Π½-ΠΠΈΠ°Ρ
- ΠΠ½Π΄Π΅ΠΊΡ SMOG
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠ΄ΠΎΠ±ΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ
- ΠΠ½Π΄Π΅ΠΊΡ ΡΠ΄ΠΎΠ±ΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ LIX
ΠΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΡ ΠΌΠ΅ΡΡΠΈΠΊ Π΄Π»Ρ ΡΡΡΡΠΊΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° Π±ΡΠ»ΠΈ Π²Π·ΡΡΡ ΠΈΠ· ΡΠ°Π±ΠΎΡΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠ° Plain Russian Language, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ°Π½Π½ΡΡ ΡΠ΅ΠΊΡΡΠΎΠ² Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π²ΠΎΠ·ΡΠ°ΡΡΠ½ΡΠΌΠΈ ΠΏΠΎΠΌΠ΅ΡΠΊΠ°ΠΌΠΈ.
ΠΡΠΈΠΌΠ΅Ρ:
from ruts import ReadabilityStats
text = "ΠΠΎΠ³ Π½Π΅Ρ, Π° Ρ
ΠΎΠΆΡ, ΡΡΠ° Π½Π΅Ρ, Π° ΡΠΊΠ°ΠΆΡ: ΠΊΠΎΠ³Π΄Π° ΡΠΏΠ°ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²ΡΡΠ°Π²Π°ΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΠ°Π±ΠΎΡΡ Π½Π°ΡΠΈΠ½Π°ΡΡ"
rs = ReadabilityStats(text)
rs.get_stats()
{'automated_readability_index': 0.2941666666666656,
'coleman_liau_index': 0.2941666666666656,
'flesch_kincaid_grade': 3.4133333333333304,
'flesch_reading_easy': 83.16166666666666,
'lix': 48.333333333333336,
'smog_index': 0.05}
rs.print_stats()
ΠΠ΅ΡΡΠΈΠΊΠ° | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅
--------------------------------------------------
Π’Π΅ΡΡ Π€Π»Π΅ΡΠ°-ΠΠΈΠ½ΠΊΠ°ΠΉΠ΄Π° | 3.41
ΠΠ½Π΄Π΅ΠΊΡ ΡΠ΄ΠΎΠ±ΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ Π€Π»Π΅ΡΠ° | 83.16
ΠΠ½Π΄Π΅ΠΊΡ ΠΠΎΠ»ΠΌΠ°Π½-ΠΠΈΠ°Ρ | 0.29
ΠΠ½Π΄Π΅ΠΊΡ SMOG | 0.05
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠ΄ΠΎΠ±ΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ | 0.29
ΠΠ½Π΄Π΅ΠΊΡ ΡΠ΄ΠΎΠ±ΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ LIX | 48.33
ΠΠ΅ΡΡΠΈΠΊΠΈ Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΡ
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΡΠΈΡΠ»ΡΡΡ Π΄Π»Ρ ΡΠ΅ΠΊΡΡΠ° ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΡ:
- Type-Token Ratio (TTR)
- Root Type-Token Ratio (RTTR)
- Corrected Type-Token Ratio (CTTR)
- Herdan Type-Token Ratio (HTTR)
- Summer Type-Token Ratio (STTR)
- Mass Type-Token Ratio (MTTR)
- Dugast Type-Token Ratio (DTTR)
- Moving Average Type-Token Ratio (MATTR)
- Mean Segmental Type-Token Ratio (MSTTR)
- Measure of Textual Lexical Diversity (MTLD)
- Moving Average Measure of Textual Lexical Diversity (MAMTLD)
- Hypergeometric Distribution D (HD-D)
- ΠΠ½Π΄Π΅ΠΊΡ Π‘ΠΈΠΌΠΏΡΠΎΠ½Π°
- ΠΠ°ΠΏΠ°ΠΊΡ-ΠΈΠ½Π΄Π΅ΠΊΡ
Π§Π°ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΠΌΠ΅ΡΡΠΈΠΊ Π²Π·ΡΡΠ° ΠΈΠ· ΠΏΡΠΎΠ΅ΠΊΡΠ° lexical_diversity.
ΠΡΠΈΠΌΠ΅Ρ:
from ruts import DiversityStats
text = "ΠΠΎΠ³ Π½Π΅Ρ, Π° Ρ
ΠΎΠΆΡ, ΡΡΠ° Π½Π΅Ρ, Π° ΡΠΊΠ°ΠΆΡ: ΠΊΠΎΠ³Π΄Π° ΡΠΏΠ°ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²ΡΡΠ°Π²Π°ΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΠ°Π±ΠΎΡΡ Π½Π°ΡΠΈΠ½Π°ΡΡ"
ds = DiversityStats(text)
ds.get_stats()
{'ttr': 0.7333333333333333,
'rttr': 2.840187787218772,
'cttr': 2.008316044185609,
'httr': 0.8854692840710253,
'sttr': 0.2500605793160845,
'mttr': 0.0973825075623254,
'dttr': 10.268784661968104,
'mattr': 0.7333333333333333,
'msttr': 0.7333333333333333,
'mtld': 15.0,
'mamtld': 11.875,
'hdd': -1,
'simpson_index': 21.0,
'hapax_index': 431.2334616537499}
ds.print_stats()
ΠΠ΅ΡΡΠΈΠΊΠ° | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅
----------------------------------------------------------------------
Type-Token Ratio (TTR) | 0.92
Root Type-Token Ratio (RTTR) | 7.17
Corrected Type-Token Ratio (CTTR) | 5.07
Herdan Type-Token Ratio (HTTR) | 0.98
Summer Type-Token Ratio (STTR) | 0.96
Mass Type-Token Ratio (MTTR) | 0.01
Dugast Type-Token Ratio (DTTR) | 85.82
Moving Average Type-Token Ratio (MATTR) | 0.91
Mean Segmental Type-Token Ratio (MSTTR) | 0.94
Measure of Textual Lexical Diversity (MTLD) | 208.38
Moving Average Measure of Textual Lexical Diversity (MTLD) | 1.00
Hypergeometric Distribution D (HD-D) | 0.94
ΠΠ½Π΄Π΅ΠΊΡ Π‘ΠΈΠΌΠΏΡΠΎΠ½Π° | 305.00
ΠΠ°ΠΏΠ°ΠΊΡ-ΠΈΠ½Π΄Π΅ΠΊΡ | 2499.46
ΠΠΎΡΡΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ° ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΌΠΎΡΡΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΈ:
- ΡΠ°ΡΡΡ ΡΠ΅ΡΠΈ
- ΠΎΠ΄ΡΡΠ΅Π²Π»Π΅Π½Π½ΠΎΡΡΡ
- Π²ΠΈΠ΄
- ΠΏΠ°Π΄Π΅ΠΆ
- ΡΠΎΠ΄
- ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΡΡΡ
- Π½Π°ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅
- ΡΠΈΡΠ»ΠΎ
- Π»ΠΈΡΠΎ
- Π²ΡΠ΅ΠΌΡ
- ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΡΡΡ
- Π·Π°Π»ΠΎΠ³
ΠΠ»Ρ ΠΌΠΎΡΡΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°Π·Π±ΠΎΡΠ° ΡΠ΅ΠΊΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° pymorphy2. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊ Π²Π·ΡΡΡ ΠΈΠ· ΠΊΠΎΡΠΏΡΡΠ° OpenCorpora.
ΠΡΠΈΠΌΠ΅Ρ:
from ruts import MorphStats
text = "ΠΠΎΡΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎ, ΡΡΠΎ Π»ΡΠ±ΠΈΡΠ΅, ΠΈΠ½Π°ΡΠ΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΠΎΠ»ΡΠ±ΠΈΡΡ ΡΠΎ, ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ"
ms = MorphStats(text)
ms.pos
('VERB', 'INFN', 'CONJ', 'CONJ', 'VERB', 'ADVB', 'VERB', 'INFN', 'CONJ', 'CONJ', 'VERB')
ms.get_stats()
{'animacy': {None: 11},
'aspect': {None: 5, 'impf': 1, 'perf': 5},
'case': {None: 11},
'gender': {None: 11},
'involvement': {None: 10, 'excl': 1},
'mood': {None: 7, 'impr': 1, 'indc': 3},
'number': {None: 7, 'plur': 3, 'sing': 1},
'person': {None: 9, '2per': 1, '3per': 1},
'pos': {'ADVB': 1, 'CONJ': 4, 'INFN': 2, 'VERB': 4},
'tense': {None: 8, 'futr': 1, 'past': 1, 'pres': 1},
'transitivity': {None: 5, 'intr': 2, 'tran': 4},
'voice': {None: 11}}
ms.explain_text(filter_none=True)
(('ΠΠΎΡΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ',
{'aspect': 'perf',
'involvement': 'excl',
'mood': 'impr',
'number': 'plur',
'pos': 'VERB',
'transitivity': 'intr'}),
('ΠΏΠΎΠ»ΡΡΠΈΡΡ', {'aspect': 'perf', 'pos': 'INFN', 'transitivity': 'tran'}),
('ΡΠΎ', {'pos': 'CONJ'}),
('ΡΡΠΎ', {'pos': 'CONJ'}),
('Π»ΡΠ±ΠΈΡΠ΅',
{'aspect': 'impf',
'mood': 'indc',
'number': 'plur',
'person': '2per',
'pos': 'VERB',
'tense': 'pres',
'transitivity': 'tran'}),
('ΠΈΠ½Π°ΡΠ΅', {'pos': 'ADVB'}),
('ΠΏΡΠΈΠ΄Π΅ΡΡΡ',
{'aspect': 'perf',
'mood': 'indc',
'number': 'sing',
'person': '3per',
'pos': 'VERB',
'tense': 'futr',
'transitivity': 'intr'}),
('ΠΏΠΎΠ»ΡΠ±ΠΈΡΡ', {'aspect': 'perf', 'pos': 'INFN', 'transitivity': 'tran'}),
('ΡΠΎ', {'pos': 'CONJ'}),
('ΡΡΠΎ', {'pos': 'CONJ'}),
('ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ',
{'aspect': 'perf',
'mood': 'indc',
'number': 'plur',
'pos': 'VERB',
'tense': 'past',
'transitivity': 'tran'}))
ms.print_stats('pos', 'tense')
---------------Π§Π°ΡΡΡ ΡΠ΅ΡΠΈ---------------
ΠΠ»Π°Π³ΠΎΠ» (Π»ΠΈΡΠ½Π°Ρ ΡΠΎΡΠΌΠ°) | 4
Π‘ΠΎΡΠ· | 4
ΠΠ»Π°Π³ΠΎΠ» (ΠΈΠ½ΡΠΈΠ½ΠΈΡΠΈΠ²) | 2
ΠΠ°ΡΠ΅ΡΠΈΠ΅ | 1
-----------------ΠΡΠ΅ΠΌΡ------------------
ΠΠ΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ | 8
ΠΠ°ΡΡΠΎΡΡΠ΅Π΅ | 1
ΠΡΠ΄ΡΡΠ΅Π΅ | 1
ΠΡΠΎΡΠ΅Π΄ΡΠ΅Π΅ | 1
ΠΠ°Π±ΠΎΡΡ Π΄Π°Π½Π½ΡΡ
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΏΡΠ΅Π΄ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΌΠΈ Π½Π°Π±ΠΎΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ :
- sov_chrest_lit - ΡΠΎΠ²Π΅ΡΡΠΊΠΈΠ΅ Ρ ΡΠ΅ΡΡΠΎΠΌΠ°ΡΠΈΠΈ ΠΏΠΎ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΠ΅
- stalin_works - ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡΠΎΠ±ΡΠ°Π½ΠΈΠ΅ ΡΠΎΡΠΈΠ½Π΅Π½ΠΈΠΉ Π.Π. Π‘ΡΠ°Π»ΠΈΠ½Π°
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠ°ΠΊ Ρ ΡΠΈΡΡΡΠΌΠΈ ΡΠ΅ΠΊΡΡΠ°ΠΌΠΈ (Π±Π΅Π· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ), ΡΠ°ΠΊ ΠΈ Ρ Π·Π°ΠΏΠΈΡΡΠΌΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ ΠΈΡ ΠΏΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌ.
ΠΡΠΈΠΌΠ΅Ρ:
from ruts.datasets import SovChLit
sc = SovChLit()
sc.info
{'description': 'ΠΠΎΡΠΏΡΡ ΡΠΎΠ²Π΅ΡΡΠΊΠΈΡ
Ρ
ΡΠ΅ΡΡΠΎΠΌΠ°ΡΠΈΠΉ ΠΏΠΎ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΠ΅',
'url': 'https://dataverse.harvard.edu/file.xhtml?fileId=3670902&version=DRAFT',
'ΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅': 'sov_chrest_lit'}
for i in sc.get_records(max_len=100, category='ΠΠ΅ΡΠ½Π°', limit=1):
pprint(i)
{'author': 'Π. Π’ΡΡΡΠ½Π΅Π²Π°',
'book': 'Π ΠΎΠ΄Π½Π°Ρ ΡΠ΅ΡΡ. ΠΠ½ΠΈΠ³Π° Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ Π² I ΠΊΠ»Π°ΡΡΠ΅ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΊΠΎΠ»Ρ',
'category': 'ΠΠ΅ΡΠ½Π°',
'file': PosixPath('../ruTS/ruts_data/texts/sov_chrest_lit/grade_1/155'),
'grade': 1,
'subject': 'ΠΠΎΠΆΠ΄ΠΈΠΊ',
'text': 'ΠΠΎΠΆΠ΄ΠΈΠΊ, Π΄ΠΎΠΆΠ΄ΠΈΠΊ, ΠΏΠΎΠ»ΠΈΠ²Π°ΠΉ, Π±ΡΠ΄Π΅Ρ Ρ
Π»Π΅Π±Π° ΠΊΠ°ΡΠ°Π²Π°ΠΉ!\n'
'ΠΠΎΠΆΠ΄ΠΈΠΊ, Π΄ΠΎΠΆΠ΄ΠΈΠΊ, ΠΏΡΠΈΠΏΡΡΡΠΈ, Π΄Π°ΠΉ Π³ΠΎΡΠΎΡ
Ρ ΠΏΠΎΠ΄ΡΠ°ΡΡΠΈ!',
'type': 'Π‘ΡΠΈΡ
ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈΠ΅',
'year': 1963}
for i in sc.get_texts(text_type='ΠΠ°ΡΠ½Ρ', limit=1):
pprint(i)
('β Π‘ΠΎΡΠ΅Π΄ΠΊΠ°, ΡΠ»ΡΡΠ°Π»Π° Π»Ρ ΡΡ Π΄ΠΎΠ±ΡΡΡ ΠΌΠΎΠ»Π²Ρ? β Π²Π±Π΅ΠΆΠ°Π²ΡΠΈ, ΠΊΡΡΡΠ΅ ΠΌΡΡΡ ΡΠΊΠ°Π·Π°Π»Π°:\n'
'β ΠΠ΅Π΄Ρ ΠΊΠΎΡΠΊΠ°, Π³ΠΎΠ²ΠΎΡΡΡ, ΠΏΠΎΠΏΠ°Π»Π°ΡΡ Π² ΠΊΠΎΠ³ΡΠΈ Π»ΡΠ²Ρ. ΠΠΎΡ ΠΎΡΠ΄ΠΎΡ
Π½ΡΡΡ ΠΈ Π½Π°ΠΌ ΠΏΠΎΡΠ° '
'Π½Π°ΡΡΠ°Π»Π°!\n'
'β ΠΠ΅ ΡΠ°Π΄ΡΠΉΡΡ, ΠΌΠΎΠΉ ΡΠ²Π΅Ρ,β Π΅ΠΉ ΠΊΡΡΡΠ° Π³ΠΎΠ²ΠΎΡΠΈΡ Π² ΠΎΡΠ²Π΅Ρ,β ΠΈ Π½Π΅ Π½Π°Π΄Π΅ΠΉΡΡ '
'ΠΏΠΎ-ΠΏΡΡΡΠΎΠΌΡ.\n'
'ΠΠΎΠ»Ρ Π΄ΠΎ ΠΊΠΎΠ³ΡΠ΅ΠΉ Ρ Π½ΠΈΡ
Π΄ΠΎΠΉΠ΄ΡΡ, ΡΠΎ, Π²Π΅ΡΠ½ΠΎ, Π»ΡΠ²Ρ Π½Π΅ Π±ΡΡΡ ΠΆΠΈΠ²ΠΎΠΌΡ: ΡΠΈΠ»ΡΠ½Π΅Π΅ ΠΊΠΎΡΠΊΠΈ '
'Π·Π²Π΅ΡΡ Π½Π΅Ρ.')
ΠΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π²ΠΈΠ΄ΠΎΠ² Π³ΡΠ°ΡΠΈΠΊΠΎΠ²:
- ΠΠ°ΠΊΠΎΠ½ Π¦ΠΈΠΏΡΠ° (Zipf's law)
- ΠΠΈΡΠ΅ΡΠ°ΡΡΡΠ½Π°Ρ Π΄Π°ΠΊΡΠΈΠ»ΠΎΡΠΊΠΎΠΏΠΈΡ (Literature Fingerprinting)
- ΠΠ΅ΡΠ΅Π²ΠΎ ΡΠ»ΠΎΠ² (Word Tree)
ΠΡΠΈΠΌΠ΅Ρ:
from collections import Counter
from nltk.corpus import stopwords
from ruts import WordsExtractor
from ruts.datasets import SovChLit
from ruts.visualizers import zipf
sc = SovChLit()
text = '\n'.join([text for text in sc.get_texts(limit=100)])
we = WordsExtractor(use_lexemes=True, stopwords=stopwords.words('russian'), filter_nums=True)
tokens_with_count = Counter(we.extract(text))
zipf(tokens_with_count, num_words=100, num_labels=10, log=False, show_theory=True, alpha=1.1)
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ spaCy Π΄Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ²:
- BasicStats
- DiversityStats
- MorphStats
- ReadabilityStats
Π ΡΡΡΠΊΠΎΡΠ·ΡΡΠ½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ spaCy ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
$ python -m spacy download ru_core_news_sm
ΠΡΠΈΠΌΠ΅Ρ:
import ruts
import spacy
nlp = spacy.load('ru_core_news_sm')
nlp.add_pipe('basic', last=True)
doc = nlp("Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΡΠΈ Π²ΠΈΠ΄Π° Π»ΠΆΠΈ: Π»ΠΎΠΆΡ, Π½Π°Π³Π»Π°Ρ Π»ΠΎΠΆΡ ΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°")
doc._.basic.c_letters
{1: 1, 3: 2, 4: 3, 6: 1, 10: 2}
doc._.basic.get_stats()
{'c_letters': {1: 1, 3: 2, 4: 3, 6: 1, 10: 2},
'c_syllables': {1: 5, 2: 1, 3: 1, 4: 2},
'n_chars': 55,
'n_complex_words': 2,
'n_letters': 45,
'n_long_words': 3,
'n_monosyllable_words': 5,
'n_polysyllable_words': 4,
'n_punctuations': 2,
'n_sents': 1,
'n_simple_words': 7,
'n_spaces': 8,
'n_syllables': 18,
'n_unique_words': 8,
'n_words': 9}
Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°
- docs - Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΏΡΠΎΠ΅ΠΊΡΡ
-
ruts:
- basic_stats.py - Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ
- components.py - ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ spaCy
- constants.py - ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ
- diversity_stats.py - ΠΌΠ΅ΡΡΠΈΠΊΠΈ Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΡ ΡΠ΅ΠΊΡΡΠ°
- extractors.py - ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΠ· ΡΠ΅ΠΊΡΡΠ°
- morph_stats.py - ΠΌΠΎΡΡΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ
- readability_stats.py - ΠΌΠ΅ΡΡΠΈΠΊΠΈ ΡΠ΄ΠΎΠ±ΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ ΡΠ΅ΠΊΡΡΠ°
- utils.py - Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ
-
datasets - Π½Π°Π±ΠΎΡΡ Π΄Π°Π½Π½ΡΡ
:
- dataset.py - Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π½Π°Π±ΠΎΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
- sov_chrest_lit.py - ΡΠΎΠ²Π΅ΡΡΠΊΠΈΠ΅ Ρ ΡΠ΅ΡΡΠΎΠΌΠ°ΡΠΈΠΈ ΠΏΠΎ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΠ΅
- stalin_works.py - ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡΠΎΠ±ΡΠ°Π½ΠΈΠ΅ ΡΠΎΡΠΈΠ½Π΅Π½ΠΈΠΉ Π.Π. Π‘ΡΠ°Π»ΠΈΠ½Π°
-
visualizers - ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²:
- fingerprinting.py - ΠΠΈΡΠ΅ΡΠ°ΡΡΡΠ½Π°Ρ Π΄Π°ΠΊΡΠΈΠ»ΠΎΡΠΊΠΎΠΏΠΈΡ
- word_tree.py - ΠΠ΅ΡΠ΅Π²ΠΎ ΡΠ»ΠΎΠ²
- zipf.py - ΠΠ°ΠΊΠΎΠ½ Π¦ΠΈΠΏΡΠ°
-
tests:
- test_basic_stats.py - ΡΠ΅ΡΡΡ Π±Π°Π·ΠΎΠ²ΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊ
- test_components.py - ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² spaCy
- test_diversity_stats.py - ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΡΠΈΠΊ Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΡ ΡΠ΅ΠΊΡΡΠ°
- test_extractors.py - ΡΠ΅ΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΠ· ΡΠ΅ΠΊΡΡΠ°
- test_morph_stats - ΡΠ΅ΡΡΡ ΠΌΠΎΡΡΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊ
- test_readability_stats.py - ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΡΠΈΠΊ ΡΠ΄ΠΎΠ±ΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ ΡΠ΅ΠΊΡΡΠ°
-
datasets - ΡΠ΅ΡΡΡ Π½Π°Π±ΠΎΡΠΎΠ² Π΄Π°Π½Π½ΡΡ
:
- test_dataset.py - ΡΠ΅ΡΡΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π½Π°Π±ΠΎΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
- test_sov_chrest_lit.py - ΡΠ΅ΡΡΡ Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ ΡΠΎΠ²Π΅ΡΡΠΊΠΈΡ Ρ ΡΠ΅ΡΡΠΎΠΌΠ°ΡΠΈΠΉ ΠΏΠΎ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΠ΅
- test_stalin_works.py - ΡΠ΅ΡΡΡ Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΡΠΎΠ±ΡΠ°Π½ΠΈΡ ΡΠΎΡΠΈΠ½Π΅Π½ΠΈΠΉ Π.Π. Π‘ΡΠ°Π»ΠΈΠ½Π°
-
visualizers - ΡΠ΅ΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²:
- test_fingerprinting.py - ΡΠ΅ΡΡΡ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΠΈΡΠ΅ΡΠ°ΡΡΡΠ½Π°Ρ Π΄Π°ΠΊΡΠΈΠ»ΠΎΡΠΊΠΎΠΏΠΈΡ
- test_word_tree.py - ΡΠ΅ΡΡΡ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΠ΅ΡΠ΅Π²ΠΎ ΡΠ»ΠΎΠ²
- test_zipf.py - ΡΠ΅ΡΡΡ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΠ°ΠΊΠΎΠ½ Π¦ΠΈΠΏΡΠ°
ΠΠ²ΡΠΎΡΡ
- Π¨ΠΊΠ°ΡΠΈΠ½ Π‘Π΅ΡΠ³Π΅ΠΉ (kouki.sergey@gmail.com)
- Π‘ΠΌΠΈΡΠ½ΠΎΠ²Π° ΠΠΊΠ°ΡΠ΅ΡΠΈΠ½Π° (ekanerina@yandex.ru)
ΠΡΡΠΈΠ±ΡΡΠΈΡ
ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ BibTeX Π½ΠΎΡΠ°ΡΠΈΡ Π΄Π»Ρ ΡΠΈΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ruTS, Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π΅Π΅ Π² ΡΠ²ΠΎΠΈΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ . Π¦ΠΈΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
@software{ruTS,
author = {Sergey Shkarin},
title = {{ruTS, a library for statistics extraction from texts in Russian}},
year = 2022,
publisher = {Moscow},
url = {https://github.com/SergeyShk/ruTS}
}