Як можна використовувати API Вікісловника, щоб визначити, чи існує слово чи ні?
Як можна використовувати API Вікісловника, щоб визначити, чи існує слово чи ні?
Відповіді:
Wiktionary API може бути використаний для запиту , чи існує чи ні слова.
Приклади для існуючих та неіснуючих сторінок:
http://en.wiktionary.org/w/api.php?action=query&titles=test
http://en.wiktionary.org/w/api.php?action=query&titles=testx
Перше посилання містить приклади інших типів форматів, які може бути простіше проаналізувати.
Щоб отримати дані слова у невеликому форматі XHTML (якщо потрібно більше, ніж існує), запитуйте версію сторінки для друку:
http://en.wiktionary.org/w/index.php?title=test&printable=yes
http://en.wiktionary.org/w/index.php?title=testx&printable=yes
Потім їх можна проаналізувати з будь-яким стандартним аналізатором XML.
https://en.wiktionary.org/w/?curid=[page_id]&printable=yes
для переспрямування на сторінку XHTML за допомогою pageid
.
Є кілька застережень, просто перевіривши, чи є у Вікісловнику сторінка з іменем, яке ви шукаєте:
Застереження №1 : Усі вікісловники, включаючи англійський Вікісловник, насправді мають на меті включити кожне слово будь-якою мовою, тому, якщо ви просто використовуєте вищевказаний виклик API, ви будете знати, що слово, про яке ви запитуєте, є словом принаймні однією мовою, але не обов'язково англійська: http://en.wiktionary.org/w/api.php?action=query&titles=dicare
Застереження №2 : Можливо, існує переспрямування від одного слова до іншого слова. Це може бути з альтернативного написання, але це може бути через якусь помилку. Виклик API вище , НЕ буде розрізняти між переадресацією і статті: http://en.wiktionary.org/w/api.php?action=query&titles=profilemetry
Застереження №3 : Деякі Вікісловники, включаючи англійський Вікісловник, містять "загальноприйняті орфографічні помилки": http://en.wiktionary.org/w/api.php?action=query&titles=fourty
Застереження №4 : Деякі вікісловники дозволяють вводити записи, які містять мало інформації про цей термін або взагалі не містять його. Раніше це було поширеним у кількох Вікісловниках, але не в англійському Вікісловнику. Але, схоже, це зараз поширилося і на англійський Вікісловник: https://en.wiktionary.org/wiki/%E6%99%B6%E7%90%83 (постійне посилання на те, коли заповнювач заглушено, щоб ви все ще могли бачити як виглядає заглушка: https://en.wiktionary.org/w/index.php?title=%E6%99%B6%E7%90%83&oldid=39757161 )
Якщо вони не включені в те, що ви хочете, вам доведеться завантажити та проаналізувати сам вікітекст, що не є тривіальним завданням.
&prop=info
до запиту та перевірте відповідь на наявність redirect
атрибута.
Ви можете завантажити дамп даних Вікіторії . Більше інформації в FAQ . Для ваших цілей дамп визначень , мабуть, кращий вибір, ніж дамп xml.
Щоб зробити це по-справжньому простим, витягніть слова зі звалища так:
bzcat pages-articles.xml.bz2 | grep '<title>[^[:space:][:punct:]]*</title>' | sed 's:.*<title>\(.*\)</title>.*:\1:' > words
LANGwiktionary-DATE-pages-articles.xml.bz2
. Перейдіть за посиланням , а потім клацніть LANGwiktionary
(LANG, наприклад, 'en', 'de' ...).
Якщо ви використовуєте Python, ви можете використовувати WiktionaryParser Suyash Behera.
Ви можете встановити його до
sudo pip install wiktionaryparser
Приклад використання:
>>> from wiktionaryparser import WiktionaryParser
>>> parser = WiktionaryParser()
>>> word = parser.fetch('test')
>>> another_word = parser.fetch('test', 'french')
>>> parser.set_default_language('french')
Можливо, ви захочете спробувати JWKTL. Я щойно про це дізнався;)
http://en.wikipedia.org/wiki/Ubiquitous_Knowledge_Processing_Lab#Wiktionary_API
Як зазначалося раніше, проблема такого підходу полягає в тому, що Вікісловник надає інформацію про всі слова всіх мов . Тож підхід до перевірки того, чи існує сторінка за допомогою API Вікіпедії, не спрацює, оскільки є багато сторінок з неанглійськими словами. Щоб подолати це, потрібно проаналізувати кожну сторінку, щоб з’ясувати, чи є розділ, що описує англійське слово . Розбір вікітексту не є тривіальним завданням, хоча у вашому випадку це не так вже й погано. Щоб охопити майже всі випадки, вам потрібно просто перевірити, чи містить вікітекст English
заголовок. Залежно від мови програмування, яку ви використовуєте, ви можете знайти деякі інструменти для побудови AST із wikitext. Це охоплюватиме більшість випадків, але не всі з них, оскільки Вікісловник містить деякі загальні орфографічні помилки.
Як альтернативу ви можете спробувати використовувати робот Lingua або щось подібне. Lingua Robot аналізує вміст Вікісловника та надає його як REST API. Непуста відповідь означає, що слово існує. Зверніть увагу, що, на відміну від Вікісловника, сам API не містить жодних помилок (принаймні на момент написання цієї відповіді). Зверніть також увагу, що Вікісловник містить не лише слова, але і багатословні вирази.
Ви можете використовувати API версій:
або API розбору:
https://en.wiktionary.org/w/api.php?action=parse&page=test&prop=wikitext&formatversion=2
Більше прикладів наведено в документах .
Ось початок аналізу даних етимології та вимови:
function parsePronunciationLine(line) {
let val
let type
line.replace(/\{\{\s*a\s*\|UK\s*\}\}\s*\{\{IPA\|\/?([^\/\|]+)\/?\|lang=en\}\}/, (_, $1) => {
val = $1
type = 'uk'
})
line.replace(/\{\{\s*a\s*\|US\s*\}\}\s*\{\{IPA\|\/?([^\/\|]+)\/?\|lang=en\}\}/, (_, $1) => {
val = $1
type = 'us'
})
line.replace(/\{\{enPR|[^\}]+\}\},?\s*\{\{IPA\|\/?([^\/\|]+)\/?\|lang=en}}/, (_, $1) => {
val = $1
type = 'us'
})
line.replace(/\{\{a|GA\}\},?\s*\{\{IPA\|\/?([^\/\|]+)\/?\|lang=en}}/, (_, $1) => {
val = $1
type = 'ga'
})
line.replace(/\{\{a|GA\}\},?.+\{\{IPA\|\/?([^\/\|]+)\/?\|lang=en}}/, (_, $1) => {
val = $1
type = 'ga'
})
// {{a|GA}} {{IPA|/ˈhæpi/|lang=en}}
// * {{a|RP}} {{IPA|/pliːz/|lang=en}}
// * {{a|GA}} {{enPR|plēz}}, {{IPA|/pliz/|[pʰliz]|lang=en}}
if (!val) return
return { val, type }
}
function parseEtymologyPiece(piece) {
let parts = piece.split('|')
parts.shift() // first one is ignored.
let ls = []
if (langs[parts[0]]) {
ls.push(parts.shift())
}
if (langs[parts[0]]) {
ls.push(parts.shift())
}
let l = ls.pop()
let t = parts.shift()
return [ l, t ]
// {{inh|en|enm|poisoun}}
// {{m|enm|poyson}}
// {{der|en|la|pōtio|pōtio, pōtiōnis|t=drink, a draught, a poisonous draught, a potion}}
// {{m|la|pōtō|t=I drink}}
// {{der|en|enm|happy||fortunate, happy}}
// {{cog|is|heppinn||lucky}}
}
Оновлення : Ось суть його більш докладної.
langs
?
langs
становить кілька тисяч рядків, занадто великий для SO.