ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ β ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ DeepPavlov 1.1.0
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ β ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ DeepPavlov 1.1.0ΠΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π΄Π²Π° ΡΠΈΠΏΠ° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΎΠ² Π΄Π»Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ: Π»Π΅Π²Π΅Π½ΡΡΠ΅ΠΉΠ½_ΠΊΠΎΡΡΠ΅ΠΊΡΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΡΠΎΡΡΠΎΠ΅ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΠ°ΠΌΠ΅ΡΠ°Ρ-ΠΠ΅Π²Π΅Π½ΡΡΠ΅ΠΉΠ½Π° Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠΎΠ² Π½Π° ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ Π±ΡΠΈΠ»Π»ΠΌΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΡ Π½Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ΅. Π ΠΎΠ±ΠΎΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΡ Π²ΡΠ±ΠΈΡΠ°ΡΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ·ΡΠΊΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ kenlm. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ°Π΅ΡΡΡ ΠΊ ΠΊΠΎΠ½ΡΡ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° readme.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅
ΠΠΊΠΎΠ»ΠΎ 4,4 ΠΠ Π½Π° Π΄ΠΈΡΠΊΠ΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΡΡΡΠΊΠΎΡΠ·ΡΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΠΎΠΊΠΎΠ»ΠΎ 7 ΠΠ Π΄Π»Ρ Π°Π½Π³Π»ΠΎΡΠ·ΡΡΠ½ΠΎΠΉ.
ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ
Π‘Π½Π°ΡΠ°Π»Π° Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ:
python -m deeppavlov install
Π³Π΄Π΅ β ΡΡΠΎ ΠΏΡΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π±Π΅Π· ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ levenshtein_corrector_ru.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ:
python -m deeppavlov Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ[-d]
, Π³Π΄Π΅ β ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
Π‘ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ -d Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ°
Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ Π±ΡΠ΄Π΅Ρ Π·Π°Π³ΡΡΠΆΠ΅Π½, Π²ΠΊΠ»ΡΡΠ°Ρ
ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΠ·ΡΠΊΠΎΠ²ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ.
ΠΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΠΈ Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΊΠΎΠ΄ ΠΏΠΈΡΠΎΠ½Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΡ ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ ΡΡΡΠΎΠΊΠΈ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΈ ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄:
ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈΠΌΠΏΠΎΡΡΠ°
ΠΈΠ· Π΄ΠΈΠΏΠΏΠ°Π²Π»ΠΎΠ²Π° ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ build_model, ΠΊΠΎΠ½ΡΠΈΠ³ΠΈ
CONFIG_PATH=configs.spelling_correction.levenshtein_corrector_ru
ΠΌΠΎΠ΄Π΅Π»Ρ = build_model (CONFIG_PATH, Π·Π°Π³ΡΡΠ·ΠΊΠ° = True)
Π΄Π»Ρ ΡΡΡΠΎΠΊΠΈ Π² sys.stdin:
ΠΏΠ΅ΡΠ°ΡΡ (ΠΌΠΎΠ΄Π΅Π»Ρ ([ΡΡΡΠΎΠΊΠ°]) [0], ΡΠ»Π΅Ρ = ΠΡΡΠΈΠ½Π°)
levenshtein_corrector
ΠΡΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π½Π°Ρ
ΠΎΠ΄ΠΈΡ Π²ΡΠ΅
ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠΎΠ² Π² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΡΠ»ΠΎΠ²Π°ΡΠ΅ Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΈ ΠΠ°ΠΌΠ΅ΡΠ°Ρ-ΠΠ΅Π²Π΅Π½ΡΡΠ΅ΠΉΠ½Π°.
ΠΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠΎΠΊΠ΅Π½ Π½Π° Π΄Π²Π°, Π½ΠΎ ΠΏΠΎ-Π΄ΡΡΠ³ΠΎΠΌΡ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ.
Π²ΠΎΠΊΡΡΠ³.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°:
Π²β ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°: ΠΈΠΌΡ Π²Ρ ΠΎΠ΄Π° ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π² ΠΎΠ±ΡΠ°Ρ ΠΏΠ°ΠΌΡΡΡ ΡΠ΅ΠΏΠ΅ΠΉoutβ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°: ΠΈΠΌΡ Π²ΡΠ²ΠΎΠ΄Π° ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π² ΠΎΠ±ΡΠ°Ρ ΠΏΠ°ΠΌΡΡΡ ΡΠ΅ΠΏΠ΅ΠΉclass_nameΠ²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π½ΠΎ"spelling_levenshtein"ΠΈΠ»ΠΈdeeppavlov.models.spelling_correction.levenshtein.searcher_component:LevenshteinSearcherComponent.ΡΠ»ΠΎΠ²β ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΡΠ»ΠΎΠ² (Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΡΡΠ»ΠΊΠ°)max_distanceβ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΠ°ΠΌΠ΅ΡΠ°Ρ-ΠΠ΅Π²Π΅Π½ΡΡΠ΅ΠΉΠ½Π° ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ ΠΈ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠ°ΠΌΠΈerror_probabilityβ Π½Π°Π·Π½Π°ΡΠ΅Π½Π½Π°Ρ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
brillmoore
ΠΡΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π°
Π£Π»ΡΡΡΠ΅Π½Π½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΎΡΠΈΠ±ΠΎΠΊ Π΄Π»Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ Π·Π°ΡΡΠΌΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°
ΠΡΠΈΠΊΠ° ΠΡΠΈΠ»Π»Π° ΠΈ Π ΠΎΠ±Π΅ΡΡΠ° Π‘.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°:
Π²β ΡΠΏΠΈΡΠΎΠΊ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ: ΠΈΠΌΡ Π²Ρ ΠΎΠ΄Π° ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π² ΠΎΠ±ΡΠ°Ρ ΠΏΠ°ΠΌΡΡΡ ΡΠ΅ΠΏΠ΅ΠΉoutβ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°: ΠΈΠΌΡ Π²ΡΠ²ΠΎΠ΄Π° ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π² ΠΎΠ±ΡΠ°Ρ ΠΏΠ°ΠΌΡΡΡ ΡΠ΅ΠΏΠ΅ΠΉclass_nameΠ²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π½ΠΎ"spelling_error_model"ΠΈΠ»ΠΈdeeppavlov.models.spelling_correction.brillmoore.error_model:ErrorModel.β ΠΏΡΡΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π° ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΡΠ»Π΅ ΡΡΠ΅Π±Π½Π°Ρ ΡΠ΅ΡΡΠΈΡ save_pathload_pathβ ΠΏΡΡΡ ΠΊ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ±ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈwindowβ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠΊΠ½Π° Π΄Π»Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΎΡ0Π΄ΠΎ4, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ1ΠΠ°Π½Π΄ΠΈΠ΄Π°ΡΡ_ΡΡΠ΅Ρβ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠΎΠ² Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅Π½ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°ΡΠ»ΠΎΠ²Π°ΡΡβ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠ»ΠΎΠ²Π°ΡΡ, ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ (ΠΈΠ»ΠΈ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΎ ΠΎΡ)deeppavlov.
vocabs.static_dictionary.StaticDictionary class_nameβΒ"static_dictionary"Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π΄Π²ΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ :"russian_words_vocab"Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΏΠΈΡΠΎΠΊ ΡΡΡΡΠΊΠΈΡ ΡΠ»ΠΎΠ² ΠΈΠ· https://github.com/danakt/russian-words/"wikitionary_100K_vocab"Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠΏΠΈΡΠΊΠ° ΡΠ°ΠΌΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ ΡΠ»ΠΎΠ² ΠΈΠ· Project Gutenberg ΠΈΠ· ΠΠΈΠΊΠΈΡΠ»ΠΎΠ²Π°ΡΡ
ΠΈΠΌΡ_ΡΠ»ΠΎΠ²Π°ΡΡβ ΠΈΠΌΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ ΡΠ»ΠΎΠ²Π°ΡΡ. Π±ΡΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ ΠΈ Π·Π°Π³ΡΡΠΆΠ΅Π½ ΠΈΠ·, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ"ΡΠ»ΠΎΠ²Π°ΡΡ"Π΄Π»Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ_ΡΠ»ΠΎΠ²Π°ΡΡraw_dictionary_path β ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ ΡΠ΅ΡΠ΅Π· ΡΡΡΠΎΠΊΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ»ΠΎΠ²Π°ΡΠ½ΡΡ ΡΠ»ΠΎΠ², Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ static_dictionary
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ
ΠΠ»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΡΡΠ°ΠΏΠ° ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡΡΠΈΡΡ ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
dataset_iteratorβ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ"dataset_iterator": {"class_name": "typos_iterator"}class_nameΠ²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π½ΠΎtypos_iteratortest_ratioβ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΎΠ²ΡΡ Π΄Π°Π½Π½ΡΡ ΠΊ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ, ΠΎΡ0,Π΄ΠΎ1., ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
0.
dataset_readerclass_nameβtypos_custom_readerΠ΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π΄Π²Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ :typos_kartaslov_readerΠ΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΠΊ Π΄Π»Ρ ΡΡΡΡΠΊΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΈΠ· https://github.com/dkulagin/kartaslov/tree/master/dataset/orfo_and_typostypos_wikipedia_readerΠ΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π² Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ β https://en.wikipedia.org/wiki/ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ:Lists_of_common_misspellings/For_machines
data_pathβ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ typos_custom_reader ΠΊΠ°ΠΊ ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ» Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ , Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠΎΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΊΡ ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ»ΠΎΠ²Π°, ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ ΡΠ°Π±ΡΠ»ΡΡΠΈΠΈ
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π΄Π»Ρ ΠΏΡΠ°Π²ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ_error_model ΡΠΎΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½
have as fit_on ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ β ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ· Π΄Π²ΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²:
ΠΈΠΌΠ΅Π½Π° Π²Ρ
ΠΎΠ΄Π½ΡΡ
ΠΈ Π²ΡΡ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π² ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΌ ΡΠ΅ΠΏΠΎΡΠΊΠ΅
ΠΠ°ΠΌΡΡΡ.
Π―Π·ΡΠΊΠΎΠ²Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ
ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ KenLM Π΄Π»Ρ ΡΠ·ΡΠΊΠΎΠ²ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅, ΠΌΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌ Π²Π°ΠΌ ΠΏΠΎΡΠ΅ΡΠΈΡΡ Π΅Π³ΠΎ Π²Π΅Π±-ΡΠ°ΠΉΡ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΎΠ²ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π»Ρ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΠΉ (5,5 ΠΠ) ΠΈ ΡΡΡΡΠΊΠΈΠΉ (3,1 ΠΠ) ΡΠ·ΡΠΊΠΎΠ².
Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅
ΠΡ ΡΡΠ°Π²Π½ΠΈΠ»ΠΈ Π½Π°ΡΠΈ ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄Ρ Ρ Π―Π½Π΄Π΅ΠΊΡ.Π‘ΠΏΠ΅Π»Π»Π΅Ρ, JamΠΡΠ°Π²ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈ PyHunΠΠ°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΠΎΠ²ΠΎΠΌ Π½Π°Π±ΠΎΡΠ΅ Π΄Π»Ρ SpellRuEval ΡΠΎΡΠ΅Π²Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ± Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΠΈ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΡΡΡΠΊΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°:
ΠΠ΅ΡΠΎΠ΄ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΠΈ | Π’ΠΎΡΠ½ΠΎΡΡΡ | ΠΡΠ·ΡΠ² | Π Π°Π·ΠΌΠ΅Ρ F | Π‘ΠΊΠΎΡΠΎΡΡΡ (ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ/Ρ) |
|---|---|---|---|---|
Π―Π½Π΄Π΅ΠΊΡ.Π‘ΠΏΠ΅Π»Π»Π΅Ρ | 83.09 | 59,86 | 69,59 | |
ΠΠ°ΠΌΠ΅ΡΠ°Ρ ΠΠ΅Π²Π΅Π½ΡΡΠ΅ΠΉΠ½ 1 + ΠΏ. | 59,38 | 53,44 | 56,25 | 39,3 |
Hunspell + Π»ΠΌ | 41.03 | 48,89 | 44,61 | 2.1 |
JamSpell | 44,57 | 35,69 | 39,64 | 136,2 |
Π₯Π°Π½ΡΠΏΠ΅Π»Π» ββ | 30.30 | 34.02 | 32.06 | 20,3 |
Π§ΠΈΡΠ°ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ Π: ΠΌΠ°ΡΡΠ΅Ρ
- ΠΠ΅ΡΡΠΈΠΈ
- ΠΌΠ°ΡΡΠ΅Ρ
- ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ
- 1.0.2
- 1.0.1
- 1.0.0
- 1.0.0rc1
- 1.0.0rc0
- 0,17,6
- 0,17,5
- 0.
17.4 0.17.3- 0.17.2
- 0.17.1
- 0.17.0
- 0.16.0
- 0.15.0
- 0.14.1
- 0.14.0
- 0.13.0
- 0.12.1
- 0.12.0
- 0.11.0
- 0.10.0
- 0.9.1
- 0.9.0
- 0.8.0
- 0.7.1
- 0.7.0
- 0.6.0
- 0.5.1
- 0.5.0
- 0.4.0
- 0.3.1
- 0.3.0
- 0.2.0
- 0.1.6
- 0.
1.5.1 - 0.1.5
- 0.1.1
- 0.1.0
- 0.0.9
- 0.0.8
- 0.0.7
- 0.0.6.5
- ΠΠ°Π³ΡΡΠ·ΠΊΠΈ
- ΠΡΠΈ ΠΏΡΠΎΡΡΠ΅Π½ΠΈΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ²
- ΠΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ°
- Π‘ΡΡΠΎΠΈΡ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ Python Ru Python ΡΠΏΡΠΎΡΠΈΠ»
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ 6 ΠΌΠ΅ΡΡΡΠ΅Π² Π½Π°Π·Π°Π΄
ΠΡΠΎΡΠΌΠΎΡΡΠ΅Π½ΠΎ 197 ΡΡΡΡΡ ΡΠ°Π·
Π― Π½ΠΎΠ²ΠΈΡΠΎΠΊ Π² Python ΠΈ NLTK. Π― Π·Π°Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ (Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅).
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Enchant Π½Π° Python 2.7, PyEnchant ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ NLTK. ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅/Π·Π°ΠΌΠ΅Π½Ρ.
ΠΈΠ· ΠΈΠΌΠΏΠΎΡΡΠ° nltk.metrics edit_distance
ΠΊΠ»Π°ΡΡ SpellingReplacer:
def __init__(self, dict_name='en_GB', max_dist=2):
self.spell_dict = enchant.Dict(dict_name)
self.max_dist = 2
def Π·Π°ΠΌΠ΅Π½ΠΈΡΡ (Ρ, ΡΠ»ΠΎΠ²ΠΎ):
Π΅ΡΠ»ΠΈ self.spell_dict.check(ΡΠ»ΠΎΠ²ΠΎ):
Π²ΠΎΠ·Π²ΡΠ°ΡΠ½ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ
ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ = self.spell_dict.suggest(ΡΠ»ΠΎΠ²ΠΎ)
Π΅ΡΠ»ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ edit_distance(ΡΠ»ΠΎΠ²ΠΎ, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ[0]) <= self.max_dist:
Π²Π΅ΡΠ½ΡΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ[0]
Π΅ΡΠ΅:
Π²ΠΎΠ·Π²ΡΠ°ΡΠ½ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ
Π― Π½Π°ΠΏΠΈΡΠ°Π» ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΠ»ΠΎΠ² ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ replace() Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°, Π° Π·Π°ΡΠ΅ΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΡΠΈΡ ΡΠ»ΠΎΠ², Π½ΠΎ Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ.
ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ_ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ (ΡΠΏΠΈΡΠΎΠΊ_ΡΠ»ΠΎΠ²):
ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠΉ_ΡΠΏΠΈΡΠΎΠΊ = []
Π΄Π»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² word_list:
replacer = ΠΠ°ΠΌΠ΅Π½ΠΈΡΠ΅Π»Ρ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ()
r = replacer.
replace(ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ)
checked_list.append(r)
Π²Π΅ΡΠ½ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠΉ_ΡΠΏΠΈΡΠΎΠΊ
>>> word_list = ['ΠΌΠ°ΡΠΈΠ½Π°', 'ΡΠ²Π΅Ρ']
>>> ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ (ΡΠ»ΠΎΠ²Π°)
['Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ', 'ΡΠ²Π΅Ρ']
ΠΠ½Π΅ ΡΡΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ Π½ΡΠ°Π²ΠΈΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠΎΡΠ½ΠΎ, ΠΈ Ρ ΠΈΡΡ ΡΠΏΠΎΡΠΎΠ± Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ ΠΈ Π·Π°ΠΌΠ΅Π½Ρ ΡΠ»ΠΎΠ². ΠΠ½Π΅ ΡΠ°ΠΊΠΆΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΡΠΎ-ΡΠΎ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Β«caaaarΒ»? Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ Π»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ? ΠΡΠ»ΠΈ ΡΠ°ΠΊ, ΡΠΎ ΠΊΡΠΎ ΠΎΠ½ΠΈ? ΠΠ°ΠΊ Google ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ? ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° ΠΏΠΎ ΠΏΡΠ°Π²ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠ°.
ΠΡΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ?
- python
- python-2.7
- nltk
- ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ
- pyenchant
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
ΠΈΠ· Π°Π²ΡΠΎΠ·Π°ΠΌΠ΅Π½Ρ ΠΈΠΌΠΏΠΎΡΡΠ° Speller
Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅ = ΠΏΡΠ°Π²ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ (ΡΠ·ΡΠΊ = 'en')
ΠΏΠ΅ΡΠ°ΡΡ (Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅ ('caaaar'))
ΠΏΠ΅ΡΠ°ΡΡ (Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅ ('mussage'))
ΠΏΠ΅ΡΠ°ΡΡ (Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅ ('survice'))
ΠΏΠ΅ΡΠ°ΡΡ (Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅ ('hte'))
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ:
Π¦Π΅Π·Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ»ΡΠ³Π° Π²
5
Π― ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ Π½Π°ΡΠ°ΡΡ Ρ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ° ΠΠΈΡΠ΅ΡΠ° ΠΠΎΡΠ²ΠΈΠ³Π°.
(Π£ ΠΌΠ΅Π½Ρ Π±ΡΠ»ΠΎ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΡ
ΠΎΠΆΠ΅Π΅, ΠΈ Ρ Π½Π°ΡΠ΅Π» ΡΡΠΎ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ.)
Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠΌΠ΅Π΅Ρ ΠΈΠ΄Π΅ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π°ΠΌ ΡΠ΅ΠΏΠ΅ΡΡ Π½ΡΠΆΠ½Ρ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π²Π°ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ: ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅, ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΡΡΠ°Π²ΠΊΠ° Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΡΠ»ΠΎΠ² Π² ' ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΠΈΡ .
ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ edits1 (ΡΠ»ΠΎΠ²ΠΎ): ΡΠ°Π·Π±ΠΈΠ²Π°Π΅Ρ = [(ΡΠ»ΠΎΠ²ΠΎ[:i], ΡΠ»ΠΎΠ²ΠΎ[i:]) Π΄Π»Ρ i Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅(len(word) + 1)] ΡΠ΄Π°Π»ΡΠ΅Ρ = [a + b[1:] Π΄Π»Ρ a, b Π² ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΡΡ , Π΅ΡΠ»ΠΈ b] ΡΡΠ°Π½ΡΠΏΠΎΠ½ΠΈΡΡΠ΅Ρ = [a + b[1] + b[0] + b[2:] Π΄Π»Ρ a, b Π² ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΡΡ , Π΅ΡΠ»ΠΈ len(b)>1] Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ = [a + c + b[1:] Π΄Π»Ρ a, b Π² ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π΄Π»Ρ c Π² Π°Π»ΡΠ°Π²ΠΈΡΠ΅, Π΅ΡΠ»ΠΈ b] Π²ΡΡΠ°Π²ΠΊΠΈ = [a + c + b Π΄Π»Ρ a, b Π² ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΡΡ Π΄Π»Ρ c Π² Π°Π»ΡΠ°Π²ΠΈΡΠ΅] Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ Π½Π°Π±ΠΎΡ (ΡΠ΄Π°Π»ΡΠ΅Ρ + ΡΡΠ°Π½ΡΠΏΠΎΠ½ΠΈΡΡΠ΅Ρ + Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ + Π²ΡΡΠ°Π²Π»ΡΠ΅Ρ)
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. ΠΡΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΈΠ· ΠΊΠΎΡΡΠ΅ΠΊΡΠΎΡΠ° ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ Norvig
Π₯ΠΎΡΠΎΡΠ°Ρ Π½ΠΎΠ²ΠΎΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈ ΡΠ»ΡΡΡΠ°ΡΡ ΡΠ²ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ.
ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ.
1
ΠΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ Π² Python: SymSpell, Bk-Tree ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ ΠΠΈΡΠ΅ΡΠ° ΠΠΎΠ²ΠΈΠ³Π°.
Π‘Π°ΠΌΡΠΉ Π±ΡΡΡΡΡΠΉ β SymSpell.
ΠΡΠΎ Method1 : Π‘ΡΡΠ»ΠΎΡΠ½Π°Ρ ΡΡΡΠ»ΠΊΠ° pyspellchecker
ΠΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΠΈΡΠ΅ΡΠ° ΠΠΎΡΠ²ΠΈΠ³Π°.
pip install pyspellchecker
ΠΈΠ· ΠΈΠΌΠΏΠΎΡΡΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ SpellChecker
Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅ = ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ ()
# Π½Π°ΠΉΡΠΈ ΡΠ΅ ΡΠ»ΠΎΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½Ρ Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ
Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΊΠΎΠΉ = Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅.Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ (['ΡΡΠΎ-ΡΠΎ', 'Π΅ΡΡΡ', 'ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ', 'Π·Π΄Π΅ΡΡ'])
Π΄Π»Ρ ΡΠ»ΠΎΠ²Π° Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ:
# ΠΠΎΠ»ΡΡΠΈΡΡ ΠΎΠ΄ΠΈΠ½ Β«Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π΅ΡΠΎΡΡΠ½ΡΠΉΒ» ΠΎΡΠ²Π΅Ρ
ΠΏΠ΅ΡΠ°ΡΡ (ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΡ. ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ (ΡΠ»ΠΎΠ²ΠΎ))
# ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Β«Π²Π΅ΡΠΎΡΡΠ½ΡΡ
Β» Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ²
ΠΏΠ΅ΡΠ°ΡΡ (Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅.ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΡ (ΡΠ»ΠΎΠ²ΠΎ))
Method2: SymSpell Python
pip install -U symspellpy
2
ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΡΠΆΠ΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΏΠΎΠ·Π΄Π½ΠΎ, Π½ΠΎ Ρ ΠΎΡΠ²Π΅ΡΠ°Ρ Π·Π° Π±ΡΠ΄ΡΡΠΈΠ΅ ΠΏΠΎΠΈΡΠΊΠΈ.
Π§Π’ΠΠΠ« Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΎΡΠΈΠ±ΠΎΠΊ, Π²Π°ΠΌ ΡΠ½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΡΠ»ΠΎΠ²ΠΎ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π±ΡΡΡΠ΄Π½ΡΠΌ ΠΈΠ»ΠΈ ΡΠ»Π΅Π½Π³ΠΎΠ²ΡΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, caaaar, amazzzing ΠΈ Ρ.
Π΄. Ρ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠΌΠΈΡΡ Π°Π»ΡΠ°Π²ΠΈΡΠ°ΠΌΠΈ. ΠΡΠ°ΠΊ, ΡΠ½Π°ΡΠ°Π»Π° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ ΡΡΠΈΡ
Π°Π»ΡΠ°Π²ΠΈΡΠΎΠ². ΠΠ°ΠΊ ΠΌΡ Π·Π½Π°Π΅ΠΌ, Π² Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΡΠ»ΠΎΠ²Π° ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ 2 ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΡ
ΡΡ Π°Π»ΡΠ°Π²ΠΈΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈΠ²Π΅Ρ., ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΡΠ½Π°ΡΠ°Π»Π° ΡΠ΄Π°Π»ΡΠ΅ΠΌ Π»ΠΈΡΠ½ΠΈΠ΅ ΠΏΠΎΠ²ΡΠΎΡΡ ΠΈΠ· ΡΠ»ΠΎΠ², Π° Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΈΡ
Π½Π° ΠΏΡΠ°Π²ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅.
ΠΠ»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π»ΠΈΡΠ½ΠΈΡ
Π°Π»ΡΠ°Π²ΠΈΡΠΎΠ² Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ
Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π² Python.
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Pyspellchecker ΠΈΠ· Python Π΄Π»Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ.
ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ ΠΏΠΎ ΡΡΠΎΠΉ ΡΡΡΠ»ΠΊΠ΅: https://rustyonrampage.github.io/text-mining/2017/11/28/spelling-correction-with-python-and-nltk.html
2
ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ jamspell β ΠΎΠ½ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ:
import jamspell
ΠΊΠΎΡΡΠ΅ΠΊΡΠΎΡ = jamspell.TSpellCorrector()
ΠΊΠΎΡΡΠ΅ΠΊΡΠΎΡ.LoadLangModel('en.bin')
corrector.FixFragment('ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Ρ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ')
# u'ΠΠ°ΠΊΠΎΠ΅-ΡΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ'
corrector.GetCandidates(['ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅', 'sentnec', 'Ρ', 'ΠΎΡΠΈΠ±ΠΊΠ°'], 1)
# ('ΠΏΡΠΈΠ³ΠΎΠ²ΠΎΡ', 'ΡΠ΅Π½Π°Ρ', 'ΠΏΠ°Ρ
ΡΡΠΈΠΉ', 'ΡΡΡΠ°ΠΆ')
2
Π Π’ΠΠ ΠΠΠΠΠΠ
pip install gingerit
ΠΠΠ― ΠΠΠΠ
ΠΎΡ gingerit.gingerit import GingerIt text = input("ΠΠ²Π΅Π΄ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡ Π΄Π»Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ") ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ = GingerIt().parse(ΡΠ΅ΠΊΡΡ) ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ = ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ['ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ'] ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠ΅ΠΊΡΡ = ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ['ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ'] print("ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠ΅ΠΊΡΡ:",correctText) Π Π°ΡΠΏΠ΅ΡΠ°ΡΠ°ΡΡ() ΠΏΠ΅ΡΠ°ΡΡ("ΠΠ‘ΠΠ ΠΠΠΠΠΠΠ―") Π΄Π»Ρ d Π² ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ : Π Π°ΡΠΏΠ΅ΡΠ°ΡΠ°ΡΡ("________________") print("ΠΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ:",d['ΡΠ΅ΠΊΡΡ']) print("ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅:",d['ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ']) print("`ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅`:",d['ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅'])
1
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ:
pip install textblob
ΠΈΠ· textblob import TextBlob
txt="ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ΅ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅"
Π± = TextBlob (txt)
print("ΠΏΠΎΡΠ»Π΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ: "+str(b.correct()))
ΠΏΠΎΡΠ»Π΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ: ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ΅ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅
2
Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΡΠΏΡΡ Π½Π° ΡΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΡΡΠΎΠ», Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΡΠ°Π½ΠΈΡΠ΅ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΡΡΡ Π² ΠΊΠΎΠ΄Π΅. Π― ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ tkinter, ΠΈ ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ, Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΡΠΎ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ!
ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ min_edit_dist (ΡΠ»ΠΎΠ²ΠΎ1, ΡΠ»ΠΎΠ²ΠΎ2):
len_1 = len (ΡΠ»ΠΎΠ²ΠΎ1)
len_2 = len (ΡΠ»ΠΎΠ²ΠΎ2)
x = [[0]*(len_2+1) for _ in range(len_1+1)]#ΠΌΠ°ΡΡΠΈΡΠ°, ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ -> ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
Π΄Π»Ρ Ρ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (0, len_1 + 1):
#ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π±Π°Π·ΠΎΠ²ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
Ρ
[Ρ] [0] = Ρ
Π΄Π»Ρ j Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (0, len_2+1):
Ρ
[0] [j] = j
Π΄Π»Ρ i Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (1,len_1+1):
Π΄Π»Ρ j Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (1, len_2+1):
Π΅ΡΠ»ΠΈ ΡΠ»ΠΎΠ²ΠΎ1[i-1]==ΡΠ»ΠΎΠ²ΠΎ2[j-1]:
Ρ
[Ρ] [j] = Ρ
[Ρ-1] [j-1]
Π΅ΡΠ΅ :
Ρ
[i][j]= ΠΌΠΈΠ½(Ρ
[i][j-1],x[i-1][j],x[i-1][j-1])+1
Π²Π΅ΡΠ½ΡΡΡ Ρ
[Ρ] [j]
ΠΈΠ· ΠΈΠΌΠΏΠΎΡΡΠ° Tkinter *
Π΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ_ΡΠ΅ΠΊΡΡ():
Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ1
ΡΠ»ΠΎΠ²ΠΎ1=(app_entry.
get())
path="C:\Documents and Settings\Owner\Desktop\Dictionary.txt"
ffile=open(ΠΏΡΡΡ,'r')
ΡΡΡΠΎΠΊΠΈ=ffile.readlines()
Distance_list=[]
print "ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΡΡΡΠΏΠ°ΡΡ ΠΏΡΡΠΌΠΎ Π΄ΠΎ ΡΡΠ΅ΡΠ° Π΄ΠΎ 10"
Π΄Π»Ρ i Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (0,58109):
dist=min_edit_dist(word1,lines[i])
Distance_list.append(ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅)
Π΄Π»Ρ j Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (0,58109):
Π΅ΡΠ»ΠΈ Distance_list[j]<=2:
ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ ΡΡΡΠΎΠΊΠΈ[j]
Π Π°ΡΠΏΠ΅ΡΠ°ΡΠ°ΡΡ" "
ΡΠ°ΠΉΠ».close()
Π΅ΡΠ»ΠΈ __name__ == "__main__":
app_win = Π’ΠΊ()
app_win.title ("Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅")
app_label = Label(app_win, text="ΠΠ²Π΅Π΄ΠΈΡΠ΅ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ")
app_label.pack()
app_entry = Π·Π°ΠΏΠΈΡΡ (app_win)
app_entry.pack()
app_button = ΠΠ½ΠΎΠΏΠΊΠ° (app_win, text="ΠΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ", command=retrive_text)
app_button.pack()
# ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠΊΠ» Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
app_win.mainloop()
pyspellchecker β ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π»ΡΡΡΠΈΡ
ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° pyspellchecker ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ Π² Π±Π»ΠΎΠ³Π΅ ΠΠΈΡΠ΅ΡΠ° ΠΠΎΡΠ²ΠΈΠ³Π°.
ΠΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ ΠΠ΅Π²Π΅Π½ΡΡΠ΅ΠΉΠ½Π° Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ 2 ΠΎΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°.
ΠΡΡΡ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ. ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π½Π°ΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΊΠ΅Ρ pipev.
- ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
ΠΏΡΠ½ΠΊΡΠΎΠ²
pip ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ pyspellchecker
- ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΎΠ²
git-ΠΊΠ»ΠΎΠ½ https://github.com/barrust/pyspellchecker.git cd pyspellchecker ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° python setup.py
ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ
ΠΈΠ· ΠΈΠΌΠΏΠΎΡΡΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ SpellChecker
Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅ = ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ ()
# Π½Π°ΠΉΡΠΈ ΡΠ΅ ΡΠ»ΠΎΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½Ρ Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ
Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΊΠΎΠΉ = Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅.Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ (['ΡΡΠΎ-ΡΠΎ', 'Π΅ΡΡΡ', 'ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ', 'Π·Π΄Π΅ΡΡ'])
Π΄Π»Ρ ΡΠ»ΠΎΠ²Π° Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ:
# ΠΠΎΠ»ΡΡΠΈΡΡ ΠΎΠ΄ΠΈΠ½ Β«Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π΅ΡΠΎΡΡΠ½ΡΠΉΒ» ΠΎΡΠ²Π΅Ρ
ΠΏΠ΅ΡΠ°ΡΡ (ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΡ. ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ (ΡΠ»ΠΎΠ²ΠΎ))
# ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Β«Π²Π΅ΡΠΎΡΡΠ½ΡΡ
Β» Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ²
ΠΏΠ΅ΡΠ°ΡΡ (Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅.ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΡ (ΡΠ»ΠΎΠ²ΠΎ))
ΠΈΠ· Π°Π²ΡΠΎΠ·Π°ΠΌΠ΅Π½Ρ ΠΈΠΌΠΏΠΎΡΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ, ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΠΉΡΠ΅ Π°Π½Π°ΠΊΠΎΠ½Π΄Ρ, ΠΈ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π° Π½Π΅ Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ, ΡΠ°ΠΊ ΡΡΠΎ ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, Ρ ΠΊΠΎΡΠΎΡΡΠΌ Π²Ρ ΡΡΠΎΠ»ΠΊΠ½Π΅ΡΠ΅ΡΡ.

vocabs.static_dictionary.StaticDictionary
ΠΌ.
17.4
1.5.1
replace(ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ)
checked_list.append(r)
Π²Π΅ΡΠ½ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠΉ_ΡΠΏΠΈΡΠΎΠΊ
>>> word_list = ['ΠΌΠ°ΡΠΈΠ½Π°', 'ΡΠ²Π΅Ρ']
>>> ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΡΡΠΎΠ³ΡΠ°ΡΠΈΠΈ (ΡΠ»ΠΎΠ²Π°)
['Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ', 'ΡΠ²Π΅Ρ']
gingerit import GingerIt
text = input("ΠΠ²Π΅Π΄ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡ Π΄Π»Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ")
ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ = GingerIt().parse(ΡΠ΅ΠΊΡΡ)
ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ = ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ['ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ']
ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠ΅ΠΊΡΡ = ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ['ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ']
print("ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠ΅ΠΊΡΡ:",correctText)
Π Π°ΡΠΏΠ΅ΡΠ°ΡΠ°ΡΡ()
ΠΏΠ΅ΡΠ°ΡΡ("ΠΠ‘ΠΠ ΠΠΠΠΠΠΠ―")
Π΄Π»Ρ d Π² ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ
:
Π Π°ΡΠΏΠ΅ΡΠ°ΡΠ°ΡΡ("________________")
print("ΠΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ:",d['ΡΠ΅ΠΊΡΡ'])
print("ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅:",d['ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ'])
print("`ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅`:",d['ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅'])
get())
path="C:\Documents and Settings\Owner\Desktop\Dictionary.txt"
ffile=open(ΠΏΡΡΡ,'r')
ΡΡΡΠΎΠΊΠΈ=ffile.readlines()
Distance_list=[]
print "ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΡΡΡΠΏΠ°ΡΡ ΠΏΡΡΠΌΠΎ Π΄ΠΎ ΡΡΠ΅ΡΠ° Π΄ΠΎ 10"
Π΄Π»Ρ i Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (0,58109):
dist=min_edit_dist(word1,lines[i])
Distance_list.append(ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅)
Π΄Π»Ρ j Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (0,58109):
Π΅ΡΠ»ΠΈ Distance_list[j]<=2:
ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ ΡΡΡΠΎΠΊΠΈ[j]
Π Π°ΡΠΏΠ΅ΡΠ°ΡΠ°ΡΡ" "
ΡΠ°ΠΉΠ».close()
Π΅ΡΠ»ΠΈ __name__ == "__main__":
app_win = Π’ΠΊ()
app_win.title ("Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅")
app_label = Label(app_win, text="ΠΠ²Π΅Π΄ΠΈΡΠ΅ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ")
app_label.pack()
app_entry = Π·Π°ΠΏΠΈΡΡ (app_win)
app_entry.pack()
app_button = ΠΠ½ΠΎΠΏΠΊΠ° (app_win, text="ΠΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ", command=retrive_text)
app_button.pack()
# ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠΊΠ» Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
app_win.mainloop()