Como a API do Wikcionário pode ser usada para determinar se uma palavra existe ou não?
Como a API do Wikcionário pode ser usada para determinar se uma palavra existe ou não?
Respostas:
A API do Wikcionário pode ser usada para consultar se uma palavra existe ou não.
Exemplos para páginas existentes e não existentes:
http://en.wiktionary.org/w/api.php?action=query&titles=test
http://en.wiktionary.org/w/api.php?action=query&titles=testx
O primeiro link fornece exemplos de outros tipos de formatos que podem ser mais fáceis de analisar.
Para recuperar os dados da palavra em um formato XHTML pequeno (caso seja necessário mais do que a existência), solicite a versão para impressão da página:
http://en.wiktionary.org/w/index.php?title=test&printable=yes
http://en.wiktionary.org/w/index.php?title=testx&printable=yes
Eles podem então ser analisados com qualquer analisador XML padrão.
https://en.wiktionary.org/w/?curid=[page_id]&printable=yes
:, para redirecionar para a página XHTML usando pageid
.
Existem algumas ressalvas em apenas verificar se o Wikcionário tem uma página com o nome que você está procurando:
Advertência # 1 : Todos os Wikcionários, incluindo o Wikcionário em Inglês, na verdade têm o objetivo de incluir todas as palavras em todos os idiomas, então se você simplesmente usar a chamada de API acima, você saberá que a palavra que está perguntando é uma palavra em pelo menos um idioma, mas não necessariamente em inglês: http://en.wiktionary.org/w/api.php?action=query&titles=dicare
Advertência # 2 : talvez exista um redirecionamento de uma palavra para outra. Pode ser de uma grafia alternativa, mas pode ser de algum tipo de erro. A chamada API acima não diferencia entre um redirecionamento e um artigo: http://en.wiktionary.org/w/api.php?action=query&titles=profilemetry
Advertência nº 3 : Alguns Wikcionários, incluindo o Inglês, incluem "erros ortográficos comuns": http://en.wiktionary.org/w/api.php?action=query&titles=fourty
Advertência # 4 : Alguns Wikcionários permitem entradas de stub com pouca ou nenhuma informação sobre o termo. Isso costumava ser comum em vários Wikcionários, mas não no Wikcionário Inglês. Mas parece que agora se espalhou também para o Wikcionário em inglês: https://en.wiktionary.org/wiki/%E6%99%B6%E7%90%83 ( link permanente para quando o esboço estiver preenchido para que você ainda possa ver como é um esboço: https://en.wiktionary.org/w/index.php?title=%E6%99%B6%E7%90%83&oldid=39757161 )
Se eles não estiverem incluídos no que você deseja, você terá que carregar e analisar o próprio wikitexto, o que não é uma tarefa trivial.
&prop=info
à consulta e verifique a resposta para o redirect
atributo.
Você pode baixar um dump de dados do Wikcionário . Há mais informações no FAQ . Para seus propósitos, o despejo de definições é provavelmente uma escolha melhor do que o despejo xml.
Para mantê-lo realmente simples, extraia as palavras do dump assim:
bzcat pages-articles.xml.bz2 | grep '<title>[^[:space:][:punct:]]*</title>' | sed 's:.*<title>\(.*\)</title>.*:\1:' > words
Se estiver usando Python, você pode usar o WiktionaryParser de Suyash Behera.
Você pode instalá-lo por
sudo pip install wiktionaryparser
Exemplo de uso:
>>> from wiktionaryparser import WiktionaryParser
>>> parser = WiktionaryParser()
>>> word = parser.fetch('test')
>>> another_word = parser.fetch('test', 'french')
>>> parser.set_default_language('french')
Você pode querer experimentar o JWKTL. Acabei de descobrir;)
http://en.wikipedia.org/wiki/Ubiquitous_Knowledge_Processing_Lab#Wiktionary_API
Como mencionado anteriormente, o problema com essa abordagem é que o Wikcionário fornece informações sobre todas as palavras de todas as línguas . Portanto, a abordagem para verificar se existe uma página usando a API da Wikipedia não funcionará porque há muitas páginas para palavras que não estão em inglês. Para superar isso, você precisa analisar cada página para descobrir se há uma seção que descreve a palavra em inglês . Analisar o wikitexto não é uma tarefa trivial, embora no seu caso não seja tão ruim. Para cobrir quase todos os casos, você precisa apenas verificar se o wikitexto contém English
título. Dependendo da linguagem de programação que você usa, você pode encontrar algumas ferramentas para construir AST a partir do wikitexto. Isso cobrirá a maioria dos casos, mas não todos, porque o Wikcionário inclui alguns erros de ortografia comuns.
Como alternativa, você pode tentar usar o Lingua Robot ou algo semelhante. Lingua Robot analisa o conteúdo do Wikcionário e o fornece como uma API REST. A resposta não vazia significa que a palavra existe. Observe que, ao contrário do Wikcionário, a API em si não inclui erros de ortografia (pelo menos no momento em que escrevo esta resposta). Observe também que o Wikcionário contém não apenas as palavras, mas também expressões com várias palavras.
Aqui está um começo para analisar dados de etimologia e pronúncia:
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}}
}
Atualização : Aqui está uma essência com mais detalhes.
langs
?
langs
tem alguns milhares de linhas, grande demais para SO.
Você pode usar a API de revisões:
ou a API Parse:
https://en.wiktionary.org/w/api.php?action=parse&page=test&prop=wikitext&formatversion=2
Mais exemplos são fornecidos nos documentos .