Как оценить "Кто первый?"как равняется "кто на первом".в JavaScript? - PullRequest
0 голосов
/ 23 ноября 2010

Мне нужно оценить две строки как равные, даже если они имеют незначительные различия в пунктуации, которые не будут отличать их для целей поиска в Google.

Например, эти пары будут считаться равными (вдольс любыми другими незначительными грамматическими / орфографическими ошибками, которые, как вы думаете, могут работать в Google):

Who's on first?
whos on first.

Where's the beef/problem?
wheres the beef problem

Есть ли в JavaScript библиотечная функция, которая бы это делала?

Ответы [ 5 ]

3 голосов
/ 24 ноября 2010

Это на самом деле не простая задача, чтобы сделать это правильно, вам нужно поискать stemming .

1 голос
/ 24 ноября 2010

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

var a = "some text totest....ok";
var b = "sometext totest ok";

function testRoughEquality(a, b) {
  var ax = a.replace(/[^a-z]/gi, "");
  var bx = b.replace(/[^a-z]/gi, "");

  if(ax === bx)
    {
    alert('These strings were roughly the same: "' + a + '" and "' + b + '"');
    }
  return true;
};
0 голосов
/ 24 ноября 2010
"who's on First?".replace(/[\?' ]/g,'').toLowerCase()

Становится ближе, но это не лучший способ сделать это.

0 голосов
/ 24 ноября 2010

Если бы это была только проблема с пунктуацией и заглавными буквами (как в приведенных выше примерах), простым решением было бы пропустить и то и другое через регулярное выражение для удаления определенных знаков пунктуации, а затем преобразовать в строчные буквы и сравнить.

Что-то вроде:

function stringCompare(str1, str2)
{
    var test = /[\?\'\/]/g;
    var s1 = str1.replace(test,"").toLowerCase();
    var s2 = str2.replace(test,"").toLowerCase();
    if(str1 === str2) { return true; }
    return false;
}
0 голосов
/ 24 ноября 2010

Самый простой ответ - убрать символы, которые не имеют значения (апострофы и знаки препинания в вашем примере), нормализовать другие символы в разделители слов (косая черта в вашем примере) и уменьшить количество символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...