Сведения о вопросе

None

05:17, 27th August, 2020

Каким алгоритмом/библиотекой конвертировать слово, введённое в неправильной раскладке?

Просмотров: 438   Ответов: 11

По сути, сделать то, что делают Punto Switcher. Нужно постоянно конвертировать подобные ошибки, сделанные в разных языках, не использующих латиницу. Желательно — на Python, можно на PHP.



  Сведения об ответе

KOMP

08:45, 14th August, 2020

  Сведения об ответе

PIRLO

00:06, 16th August, 2020

Вот набросок того что я предлагал:

<?php

  $layouts['en'] = preg_split('!!u', 'qwertyuiop[]asdfghjkl;\'\zxcvbnm,./', null, PREG_SPLIT_NO_EMPTY);
  $layouts['ru'] = preg_split('!!u', 'йцукенгшщзхъфывапролджэ\ячсмитьбю.', null, PREG_SPLIT_NO_EMPTY);

 
  $phrase = "тестовая cnhjrf с неверной раскладкой\n";
  echo $phrase;

  $phrase_chunks = explode(' ', $phrase);
  $ch = array();
  foreach ($phrase_chunks as $phrase_chunk) $curl_handles[] = curl_init();

  foreach ($curl_handles as $index => $curl_handle) {
    curl_setopt($curl_handle, CURLOPT_URL, "http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q=".urlencode($phrase_chunks[$index]));
    curl_setopt($curl_handle, CURLOPT_HEADER, false);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);
  }

  $mh = curl_multi_init();

  foreach ($curl_handles as $index => $curl_handle) {
    curl_multi_add_handle($mh, $curl_handle);
  }

  $active = null;
  do {
    $mrc = curl_multi_exec($mh, $active);
  } while ($mrc == CURLM_CALL_MULTI_PERFORM);

  while ($active && $mrc == CURLM_OK) {
    if (curl_multi_select($mh) != -1) {
      do {
        $mrc = curl_multi_exec($mh, $active);
      } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
  }
  
  foreach ($curl_handles as $index => $curl_handle) {
    $responses[] = json_decode(curl_multi_getcontent($curl_handle));
  }
  
  foreach ($curl_handles as $index => $curl_handle) {
    curl_multi_remove_handle($mh, $curl_handle);
  }
  curl_multi_close($mh);
  
  foreach ($responses as $index => $response) {
    if ($response->responseData->confidence <= 0.005 && $response->responseData->language != 'ru') {
      $phrase_chunks[$index] = str_replace($layouts['en'], $layouts['ru'], $phrase_chunks[$index]);
    }
  }
  echo implode(' ', $phrase_chunks)."\n";
  
?>


  Сведения об ответе

SILA

14:51, 27th August, 2020

Разбивать на слова и передавать на поиск гуглу, если в ответе будет «возможно вы искали...» — использовать его :)


  Сведения об ответе

SKY

15:12, 3rd August, 2020

Нейронные сети же. Они образы как орехи щелкают.


  Сведения об ответе

PAGE

17:56, 7th August, 2020

На самом деле если сразу несколько языков, да еще без английского… просто задача мудренее. Возможно действительно стоит посмотреть в сторону обучаемых систем, готовое решение найти сложно будет имхо


  Сведения об ответе

DAAA

19:23, 27th August, 2020

Может, такое?
$ aptitude show enca

Описание: эвристическое определение кодировки
Enca (Extremely Naive Charset Analyser) определяет наиболее вероятную кодировку указанных текстовых файлов. Также возможно преобразование файлов в указанную кодировку (встроенными средствами, или внешними инструментами, например: libiconv, librecode, cstocs).
На данный момент поддерживаются: белорусский, болгарский, хорватский, чешский, эстонский, венгерский, латвийский, литовский, польский, русский, словацкий, словенский, украинский, китайский языки, а также определение многобайтных кодировок независимо от языка.
Сайт: gitorious.org/enca


  Сведения об ответе

SEEYOU

19:31, 13th August, 2020

  Сведения об ответе

COOL

10:42, 28th August, 2020

простите "$response->responseData->language != 'ru'" это я неправ, приду домой попытаюсь допилять, не судите строго — всего лишь набросок


  Сведения об ответе

dumai

09:28, 16th August, 2020

Найти можно в любой операционке :) должны быть таблицы соответствия скан кодов символам.


  Сведения об ответе

+-*/

00:24, 29th August, 2020

список для Windows, однако покопавшись так и не смог нормально вытянуть раскладки, впринципе часть файла понятна, но…


  Сведения об ответе

ЯЯ__4

10:53, 9th August, 2020

Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться