Есть ли способ очистить текстовый файл (избавиться от похожих слов)?(Без использования вложенных циклов) - PullRequest
1 голос
/ 03 февраля 2012

Я пытаюсь придумать оптимальный способ очистки текста в файле. Так что я хочу сделать, учитывая входной файл, сопоставить слова, которые похожи, и заменить их. Таким образом, если в файле есть apple и ApPle, ApPle будет заменен на apple.

Есть ли способ сделать это без использования двух циклов for, например:

for $word in @file
  for $word2 in @file
    if $word matches $word2
      replace $word2 with $word
    end
  end
end

Я всегда не решаюсь использовать вложенные циклы, поэтому мне просто интересно, есть ли более элегантное решение. Кроме того, если вам интересно, почему это псевдокод, то это потому, что я еще не решил, в чем его программировать. (Для тех, кто не знает, @file - это список слов, а $ word - это строка символов без пробелов).

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

Возможно, это будет работать:

  • Определите уникальное представление («хэш-функция») для похожих слов. (Если это только различие в кейсе, это легко. Если это такое же произношение, это сложнее.)

  • Считайте файл за один проход, сохраните «хэш-таблицу» и напечатайте слово, только если его еще нет в хеш-таблице.

.

for $word in @file
  hash=hashfunction($word)
  if $hash not in §hashtable
    add $hash to §hashtable
    print $hash
  end
end

Если ваша хеш-функция не инъективна, все становится немного сложнее.

0 голосов
/ 03 февраля 2012

Это действительно зависит от того, что значит «похожий» для вас, и когда слова должны быть заменены.Должен ли код определить это?Вы хотите превратить все, что написано в верхнем регистре, в строчные, или для этого в коде используются другие критерии?

В PHP вы могли бы использовать (комбинацию) следующие функции: http://www.php.net/manual/en/function.str-ireplace.php(замена без учета регистра) http://www.php.net/manual/en/function.strtolower.php (преобразование строки в нижний регистр) http://www.php.net/manual/en/function.strtoupper.php (преобразование строки в верхний регистр) http://php.net/manual/en/function.similar-text.php (посмотрите, как строка A похожа на строку B)

Если вы сможете опубликовать более подробную информацию о предполагаемом случае использования, вы, вероятно, получите лучшие ответы:)

...