Во время просмотра я наткнулся на этот блог сообщение об использовании Wikipedia API из JavaScript, чтобы связать один поисковый запрос с его определением. В конце сообщения в блоге автор упоминает возможные расширения, в том числе:
Плагин, который автоматически связывает термины со статьями Википедии.
Это идеально соответствует требованиям проекта, над которым я работаю, но, к сожалению, мне не хватает навыков программирования, чтобы расширить исходный код. Я бы хотел иметь чистый фрагмент кода JavaScript, который я могу добавить на веб-страницу, который связывает все термины на этой веб-странице, в которых есть статья во внутренней вики, с этой вики.
Я знаю, что это может потребовать многого, но код выглядит так, как будто он почти готов, и я был бы готов добавить награду, если кто-то выполнит оставшуюся работу за этот виртуальный кредит ...;) Я также подозреваю, что это может быть из значение для нескольких других, поскольку я видел похожие запросы, но не работал (это просто JavaScript (и, следовательно, переносимая) библиотека / фрагмент).
Вот образец исходного исходного кода, я надеюсь, что кто-нибудь сможет добавить к нему или указать мне, что мне нужно было бы добавить, если бы я реализовал это сам (в этом случае я поделюсь кодом, если мне удастся собрать что-нибудь вместе).
<script type="text/javascript"><!--
var spellcheck = function (data) {
var found = false; var url=''; var text = data [0];
if (text != document.getElementById ('spellcheckinput').value)
return;
for (i=0; i<data [1].length; i++) {
if (text.toLowerCase () == data [1] [i].toLowerCase ()) {
found = true;
url ='http://en.wikipedia.org/wiki/' + text;
document.getElementById ('spellcheckresult').innerHTML = '<b style="color:green">Correct</b> - <a target="_top" href="' + url + '">link</a>';
}
}
if (! found)
document.getElementById ('spellcheckresult').innerHTML = '<b style="color:red">Incorrect</b>';
};
var getjs = function (value) {
if (! value)
return;
url = 'http://en.wikipedia.org/w/api.php?action=opensearch&search='+value+'&format=json&callback=spellcheck';
document.getElementById ('spellcheckresult').innerHTML = 'Checking ...';
var elem = document.createElement ('script');
elem.setAttribute ('src', url);
elem.setAttribute ('type','text/javascript');
document.getElementsByTagName ('head') [0].appendChild (elem);
};--></script>
<form action="#" method="get" onsubmit="return false">
<p>Enter a word - <input id="spellcheckinput" onkeyup="getjs (this.value);" type="text"> <span id="spellcheckresult"></span></p></form>
Обновление
Как отмечалось в комментариях, меня также интересовало время, которое потребуется для связывания всех слов, и то, как обрабатывать названия статей, состоящих из нескольких слов.
Я бы подумал, что начало статей из одного слова уже охватывало бы большой процент вариантов использования, возможно, с некоторыми преимуществами производительности, полученными при пропуске 500 наиболее распространенных слов в английском языке, но все же я не уверен, насколько осуществимым будет этот подход. ..
С другой стороны, это все будет на стороне клиента, и некоторая задержка в связи с условиями вполне приемлема.
В качестве альтернативы поиск терминов, над которыми наведена / выбрана мышь, также может быть приемлемым, но я не уверен, что это уменьшит или повысит сложность.
Обновление 2
'Pointy' пояснил ниже, что эта функциональность может быть достигнута путем изменения некоторых довольно стандартных сценариев выделения после получения списка тем статей от api.php?action=query&list=allpages
.
Повторюсь: мы используем внутреннюю вики, поэтому список статей вероятно, ограниченный, однозначный и достаточно специфичный для предметной области, чтобы преодолеть некоторые ожидаемые проблемы при сопоставлении слов.
Поскольку до сих пор у нас было несколько хороших предложений и несколько работоспособных идей, я назначаю награду, чтобы посмотреть, смогу ли я получить несколько ответов по этому поводу ...
api.php?action=query&list=allpages
, см. en.wikipedia. org / w / Это можно дополнительно кэшировать, чтобы предотвратить загрузку списка для каждого запроса. - person Tim   schedule 27.02.2010