¿Cómo se puede usar la API de Wiktionary para determinar si una palabra existe o no?
¿Cómo se puede usar la API de Wiktionary para determinar si una palabra existe o no?
Respuestas:
La API de Wiktionary se puede utilizar para consultar si existe o no una palabra.
Ejemplos de páginas existentes y no existentes:
http://en.wiktionary.org/w/api.php?action=query&titles=test
http://en.wiktionary.org/w/api.php?action=query&titles=testx
El primer enlace proporciona ejemplos sobre otros tipos de formatos que podrían ser más fáciles de analizar.
Para recuperar los datos de la palabra en un formato XHTML pequeño (si se requiere más que la existencia), solicite la versión imprimible de la página:
http://en.wiktionary.org/w/index.php?title=test&printable=yes
http://en.wiktionary.org/w/index.php?title=testx&printable=yes
A continuación, se pueden analizar con cualquier analizador XML estándar.
https://en.wiktionary.org/w/?curid=[page_id]&printable=yes
para redirigir a la página XHTML usando pageid
.
Hay algunas advertencias al comprobar que Wiktionary tiene una página con el nombre que estás buscando:
Advertencia n. ° 1 : todos los wikcionarios, incluido el wikcionario en inglés, tienen el objetivo de incluir cada palabra en cada idioma, por lo que si simplemente usa la llamada API anterior, sabrá que la palabra por la que está preguntando es una palabra en al menos un idioma, pero no necesariamente en inglés: http://en.wiktionary.org/w/api.php?action=query&titles=dicare
Advertencia n. ° 2 : tal vez exista una redirección de una palabra a otra. Puede ser por una ortografía alternativa, pero puede ser por un error de algún tipo. La llamada a la API anterior no diferenciará entre un redireccionamiento y un artículo: http://en.wiktionary.org/w/api.php?action=query&titles=profilemetry
Advertencia # 3 : algunos wikcionarios, incluido el inglés, incluyen "errores ortográficos comunes": http://en.wiktionary.org/w/api.php?action=query&titles=fourty
Advertencia # 4 : algunos wikcionarios permiten entradas de código auxiliar que tienen poca o ninguna información sobre el término. Esto solía ser común en varios wikcionarios, pero no en el wikcionario en inglés. Pero parece que ahora se ha extendido también al Wiktionary en inglés: https://en.wiktionary.org/wiki/%E6%99%B6%E7%90%83 (enlace permanente para cuando el código auxiliar esté lleno para que aún pueda ver cómo se ve un código auxiliar: https://en.wiktionary.org/w/index.php?title=%E6%99%B6%E7%90%83&oldid=39757161 )
Si estos no están incluidos en lo que desea, tendrá que cargar y analizar el wikitext en sí, lo cual no es una tarea trivial.
&prop=info
a la consulta y verifique el redirect
atributo en la respuesta .
Puede descargar un volcado de datos de Wikitionary . Hay más información en las preguntas frecuentes . Para sus propósitos, el volcado de definiciones es probablemente una mejor opción que el volcado xml.
Para hacerlo realmente simple, extraiga las palabras del volcado de esta manera:
bzcat pages-articles.xml.bz2 | grep '<title>[^[:space:][:punct:]]*</title>' | sed 's:.*<title>\(.*\)</title>.*:\1:' > words
Si está usando Python, puede usar WiktionaryParser de Suyash Behera.
Puedes instalarlo por
sudo pip install wiktionaryparser
Uso de ejemplo:
>>> from wiktionaryparser import WiktionaryParser
>>> parser = WiktionaryParser()
>>> word = parser.fetch('test')
>>> another_word = parser.fetch('test', 'french')
>>> parser.set_default_language('french')
Es posible que desee probar JWKTL. Me acabo de enterar;)
http://en.wikipedia.org/wiki/Ubiquitous_Knowledge_Processing_Lab#Wiktionary_API
Como se mencionó anteriormente, el problema con este enfoque es que Wiktionary proporciona la información sobre todas las palabras de todos los idiomas . Entonces, el enfoque para verificar si existe una página usando la API de Wikipedia no funcionará porque hay muchas páginas para palabras que no están en inglés. Para superar esto, debe analizar cada página para averiguar si hay una sección que describa la palabra en inglés . Analizar wikitexto no es una tarea trivial, aunque en su caso no es tan malo. Para cubrir casi todos los casos, solo necesita verificar si el wikitexto contiene un English
encabezado. Dependiendo del lenguaje de programación que use, puede encontrar algunas herramientas para construir AST a partir de wikitext. Esto cubrirá la mayoría de los casos, pero no todos porque Wiktionary incluye algunos errores ortográficos comunes.
Como alternativa, puede intentar usar Lingua Robot o algo similar. Lingua Robot analiza el contenido de Wiktionary y lo proporciona como una API REST. La respuesta no vacía significa que la palabra existe. Tenga en cuenta que, a diferencia de Wiktionary, la API en sí no incluye errores ortográficos (al menos en el momento de escribir esta respuesta). Tenga en cuenta también que el Wikcionario contiene no solo las palabras, sino también expresiones de varias palabras.
Aquí hay un comienzo para analizar datos de etimología y pronunciación:
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}}
}
Actualización : aquí hay una esencia con más desarrollo.
langs
?
langs
es de unos miles de líneas, demasiado grande para SO.
Puede utilizar la API de revisiones:
o la API Parse:
https://en.wiktionary.org/w/api.php?action=parse&page=test&prop=wikitext&formatversion=2
Se proporcionan más ejemplos en los documentos .