W jaki sposób można wykorzystać API Wikisłownika do określenia, czy słowo istnieje, czy nie?
W jaki sposób można wykorzystać API Wikisłownika do określenia, czy słowo istnieje, czy nie?
Odpowiedzi:
Wikisłownik API może być użyty do zapytania, czy słowo istnieje.
Przykłady istniejących i nieistniejących stron:
http://en.wiktionary.org/w/api.php?action=query&titles=test
http://en.wiktionary.org/w/api.php?action=query&titles=testx
Pierwsze łącze zawiera przykłady innych typów formatów, które mogą być łatwiejsze do przeanalizowania.
Aby pobrać dane słowa w małym formacie XHTML (powinno być wymagane więcej niż istnienie), poproś o wersję strony do druku:
http://en.wiktionary.org/w/index.php?title=test&printable=yes
http://en.wiktionary.org/w/index.php?title=testx&printable=yes
Można je następnie przeanalizować za pomocą dowolnego standardowego parsera XML.
https://en.wiktionary.org/w/?curid=[page_id]&printable=yes
:, aby przekierować na stronę XHTML przy użyciu pageid
.
Jest kilka zastrzeżeń, jeśli chodzi o sprawdzenie, czy Wikisłownik ma stronę o nazwie, której szukasz:
Zastrzeżenie # 1 : Wszystkie Wikisłowniki, w tym angielski, mają na celu uwzględnienie każdego słowa w każdym języku, więc jeśli po prostu użyjesz powyższego wywołania API, będziesz wiedział, że słowo, o które pytasz, jest słowem w co najmniej jednym języku, ale niekoniecznie angielski: http://en.wiktionary.org/w/api.php?action=query&titles=dicare
Zastrzeżenie nr 2 : Być może istnieje przekierowanie z jednego słowa do innego. Może pochodzić z alternatywnej pisowni, ale może wynikać z jakiegoś błędu. Powyższe wywołanie API nie rozróżnia przekierowania od artykułu: http://en.wiktionary.org/w/api.php?action=query&titles=profilemetry
Zastrzeżenie # 3 : Niektóre Wikisłowniki, w tym angielski, zawierają „typowe błędy ortograficzne”: http://en.wiktionary.org/w/api.php?action=query&titles=fourty
Ostrzeżenie # 4 : Niektóre Wikisłowniki dopuszczają wpisy pośredniczące, które zawierają niewiele informacji lub nie zawierają ich wcale. To było powszechne w kilku Wikisłownikach, ale nie w angielskim Wikisłowniku. Ale wydaje się, że teraz rozprzestrzenił się również na angielskie Wikisłownik: https://en.wiktionary.org/wiki/%E6%99%B6%E7%90%83 (link stały, gdy kod jest wypełniony, więc nadal możesz zobaczyć jak wygląda stub: https://en.wiktionary.org/w/index.php?title=%E6%99%B6%E7%90%83&oldid=39757161 )
Jeśli nie są one zawarte w tym, czego chcesz, będziesz musiał załadować i przeanalizować sam wikitekst, co nie jest łatwym zadaniem.
&prop=info
do zapytania i sprawdź odpowiedź pod kątem redirect
atrybutu.
Możesz pobrać zrzut danych Wikitionary . Więcej informacji znajduje się w FAQ . Dla twoich celów zrzut definicji jest prawdopodobnie lepszym wyborem niż zrzut xml.
Aby było to naprawdę proste, wyodrębnij słowa ze zrzutu w następujący sposób:
bzcat pages-articles.xml.bz2 | grep '<title>[^[:space:][:punct:]]*</title>' | sed 's:.*<title>\(.*\)</title>.*:\1:' > words
Jeśli używasz Pythona, możesz użyć WiktionaryParser autorstwa Suyash Behera.
Możesz go zainstalować przez
sudo pip install wiktionaryparser
Przykładowe użycie:
>>> from wiktionaryparser import WiktionaryParser
>>> parser = WiktionaryParser()
>>> word = parser.fetch('test')
>>> another_word = parser.fetch('test', 'french')
>>> parser.set_default_language('french')
Możesz wypróbować JWKTL. Właśnie się o tym dowiedziałem;)
http://en.wikipedia.org/wiki/Ubiquitous_Knowledge_Processing_Lab#Wiktionary_API
Jak wspomniano wcześniej, problem z tym podejściem polega na tym, że Wikisłownik dostarcza informacji o wszystkich słowach we wszystkich językach . Dlatego metoda sprawdzania, czy strona istnieje przy użyciu interfejsu API Wikipedii, nie zadziała, ponieważ istnieje wiele stron ze słowami innymi niż angielskie. Aby temu zaradzić, musisz przeanalizować każdą stronę, aby dowiedzieć się, czy istnieje sekcja opisująca angielskie słowo . Przetwarzanie wikitekstu nie jest prostym zadaniem, chociaż w twoim przypadku nie jest takie złe. Aby omówić prawie wszystkie przypadki, wystarczy sprawdzić, czy wikitekst zawiera English
nagłówek. W zależności od używanego języka programowania, możesz znaleźć narzędzia do budowania AST z wikitekstu. Obejmie to większość przypadków, ale nie wszystkie, ponieważ Wikisłownik zawiera kilka typowych błędów ortograficznych.
Alternatywnie możesz spróbować użyć Lingua Robot lub czegoś podobnego. Lingua Robot analizuje zawartość Wikisłowników i dostarcza ją jako REST API. Niepusta odpowiedź oznacza, że słowo istnieje. Zwróć uwagę, że w przeciwieństwie do Wikisłownika, samo API nie zawiera błędów ortograficznych (przynajmniej w momencie pisania tej odpowiedzi). Proszę również zauważyć, że Wikisłownik zawiera nie tylko słowa, ale także wyrażenia wielowyrazowe.
Możesz użyć Revisions API:
lub Parse API:
https://en.wiktionary.org/w/api.php?action=parse&page=test&prop=wikitext&formatversion=2
Więcej przykładów znajduje się w dokumentacji .
Oto początek analizy danych dotyczących etymologii i wymowy:
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}}
}
Aktualizacja : Oto streszczenie, które jest bardziej rozwinięte.
langs
?
langs
jest kilka tysięcy wierszy, za duży dla SO.