ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° правописания ΠΎΠ½Π»Π°ΠΉΠ½ русский с исправлСниСм ошибок: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΎΡ€Ρ„ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ ΠΎΠ½Π»Π°ΠΉΠ½, исправлСниС ошибок

АвтоматичСскиС ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρ‹ исправлСния ΠΎΡ€Ρ„ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ β€” ДокумСнтация 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_path β€” ΠΏΡƒΡ‚ΡŒ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ сохранСна модСль послС учСбная сСссия

  • load_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_iterator

    • test_ratio β€” ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ тСстовых Π΄Π°Π½Π½Ρ‹Ρ… ΠΊ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΡŽ, ΠΎΡ‚ 0, Π΄ΠΎ 1. , ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 0.

  • dataset_reader

    • class_name β€” typos_custom_reader для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π΄Π²Π° прСдоставлСнных:

      • typos_kartaslov_reader для автоматичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΎΠΊ для русского языка ΠΈΠ· https://github.com/dkulagin/kartaslov/tree/master/dataset/orfo_and_typos

      • typos_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
Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅ = ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΎΡ€Ρ„ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ ()
# Π½Π°ΠΉΡ‚ΠΈ Ρ‚Π΅ слова, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ написаны с ошибками
с ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΎΠΉ = Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅.нСизвСстно (['Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ', 'Π΅ΡΡ‚ΡŒ', 'происходит', 'здСсь'])
для слова с ошибкой:
    # ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Β«Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ вСроятный» ΠΎΡ‚Π²Π΅Ρ‚
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (орфография. исправлСниС (слово))
    # ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список «вСроятных» Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ²
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅.ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Ρ‹ (слово))
 

ΠΈΠ· Π°Π²Ρ‚ΠΎΠ·Π°ΠΌΠ΅Π½Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π½ΠΎΠ³ΠΎ заклинания для этого Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π°Π½Π°ΠΊΠΎΠ½Π΄Ρƒ, ΠΈ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ со словами, Π° Π½Π΅ с прСдлоТСниями, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½Π΅Ρ‚Π΅ΡΡŒ.

ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ