有没有办法清理文本文件(摆脱类似的话)? (不使用嵌套for循环)

时间:2012-02-02 22:58:41

标签: pseudocode

我正在考虑清理文件中文本的最佳方法。所以我想要做的是,给定一个输入文件,匹配相似的单词并替换它们。因此,如果apple和ApPle在文件中,ApPle将被apple替换。

如果不使用两个for循环,有没有办法做到这一点:

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

我总是犹豫是否使用嵌套for循环所以我只是想知道是否有更优雅的解决方案。另外,如果你想知道为什么它是伪代码,那是因为我还没有决定用什么编程。 (对于那些不知道@file是一个单词列表而$ word是一个非空白字符串的人。)

2 个答案:

答案 0 :(得分:1)

也许这会奏效:

  • 为类似的单词定义唯一的表示(“哈希函数”)。 (如果只是区别,那很容易。如果是类似的发音,那就更难了。)

  • 一次读取文件,维护一个“哈希表”并仅在哈希表中尚未打印时才打印该词。

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

如果你的散列函数不是单射的,那么事情就会变得更加复杂。

答案 1 :(得分:0)

这实际上取决于“类似”对你意味着什么,以及何时应该替换单词。代码应该确定吗?您想将大写的所有内容转换为小写,还是代码使用不同的标准来执行此操作?

在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的相似之处)

如果您可以发布有关预期用例的更多详细信息,您可能会得到更好的答案:)