위키 낱말 사전 콘텐츠를 검색하는 방법은 무엇입니까?


90

위키 셔 너리의 API를 사용하여 단어의 존재 여부를 확인하는 방법은 무엇입니까?


문서를 읽은 사람은 API에 "위키 낱말 단어 콘텐츠를 검색"하기에 충분한 기능이 없다는 것을 알 수 있습니다. 나는 그것이 당신에게 대략 1 %의 방법을 얻는다고 추정합니다. 원시 위키 구문 또는 구문 분석 된 HTML을 검색 할 수 있으며 거기에서 모든 작업을 직접 수행해야합니다. 영어 위키 낱말 사전에서만 작동하는 아주 새로운 실험적 API가있을 수 있다고 말했지만.
hippietrail

3
여기에 개별 JSON 파일에있는 모든 위키 낱말 사전 기사를 가져 오기 : github.com/dan1wang/jsonbook-builder
다니엘

답변:


69

위키 낱말 사전 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 파서로 구문 분석 할 수 있습니다.


4
감사; API 자체는 내가 바라던 것이 아니지만 제공 한 링크는 내가 찾던 것입니다.
Armentage

1
이제 다음과 같이 xml 출력 이외의 추가 형식 매개 변수를 허용합니다. en.wiktionary.org/w/…
eenagy


사용 : https://en.wiktionary.org/w/?curid=[page_id]&printable=yes,를 사용 하여 XHTML 페이지로 리디렉션합니다 pageid.
mie.ppa

2
이 API에서 영어 단어 만 필터링하는 방법은 무엇입니까?
Nadav B

28

위키 셔 너리에 찾고있는 이름의 페이지가 있는지 확인하는 데 몇 가지주의 사항이 있습니다.

주의 사항 # 1 : English Wiktionary를 포함한 모든 Wiktionary는 실제로 모든 언어의 모든 단어를 포함하는 목표를 가지고 있으므로 위의 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 )

이것이 원하는 내용에 포함되어 있지 않으면 위키 텍스트 자체를로드하고 구문 분석해야하며 이는 간단한 작업이 아닙니다.


2
제가 정말로하고 싶었던 것은 영어가 아닌 Wikitionary 사이트 중 하나에있는 데이터의 전체 덤프를 가져다가 내용을 로컬에서 사용할 수있는 것으로 바꾸는 것이 었습니다. 지금은 어리석은 것처럼 보이지만 모든 단어 목록을 요청한 다음 필요에 따라 한 번에 하나씩 해당 단어의 정의 / 번역을 풀 수 있기를 바랐습니다.
Armentage

1
경고 # 2에 대한 수정은 간단합니다. &prop=info쿼리에 추가 하고 redirect속성에 대한 응답을 확인 합니다.
svick

@svick : 네, 사실입니다 # 2는 API를 사용할 때 우회하기가 더 쉽지만 ,이 질문은 접근 방식에 대해 묻지 않더라도 위키 낱말 사전 데이터 덤프 파일 을 파싱하려는 시도도 포함 합니다.
hippietrail

17

Wikitionary 데이터 덤프를 다운로드 할 수 있습니다 . FAQ에 더 많은 정보가 있습니다 . 사용자의 목적을 위해 정의 덤프 가 xml 덤프보다 더 나은 선택 일 것입니다.


2
이러한 덤프 파일은 방대하며 어떤 파일을 다운로드해야하는지 명확하지 않습니다 (모두?). 아마도 대부분의 사람들이 찾고있는 것이 아니라 프로그래밍 방식으로 몇 개의 단어를 검색하고 싶을 것입니다.
Cerin

1
어떤 파일을 다운로드해야하는지 설명합니다. 즉 정의 덤프 (내 링크의 디렉토리는 동일한 파일의 다른 버전 일뿐입니다), 그렇습니다. 프로그래밍 방식으로 단어를 찾으려면 이것이 이상적입니다. 프로그램이 온라인에서만 실행된다는 것을 보장 할 수 있다면 다른 옵션이 있지만 그럼에도 불구하고 원래 질문의이 부분에 대답하고 있습니다. "또는 위키 낱말 사전을 뒷받침하는 사전 데이터를 가져올 수있는 방법이 있습니까?"
kybernetikos

18
정의 덤프 링크는 더 이상 사용할 수 없습니다.
live-love

8

정말 간단하게 유지하려면 다음과 같이 덤프에서 단어를 추출하십시오.

bzcat pages-articles.xml.bz2 | grep '<title>[^[:space:][:punct:]]*</title>' | sed 's:.*<title>\(.*\)</title>.*:\1:' > words

pages-articles.xml.bz2의 사본을 얻으려면 어떻게해야합니까?
Armentage

양식의 덤프를 설명하는 데 사용한 일반적인 이름 LANGwiktionary-DATE-pages-articles.xml.bz2입니다. 링크로 이동 한 다음 LANGwiktionary(LANG 예 : 'en', 'de'...)를 클릭합니다.
benroth

5

Python을 사용 하는 경우 Suyash Behera의 WiktionaryParser 를 사용할 수 있습니다 .

다음 방법으로 설치할 수 있습니다.

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')


1

앞서 언급했듯이이 접근 방식의 문제점은 Wiktionary가 모든 언어의 모든 단어에 대한 정보를 제공 한다는 것입니다 . 따라서 Wikipedia API를 사용하여 페이지가 있는지 확인하는 방법은 영어가 아닌 단어에 대한 페이지가 많기 때문에 작동하지 않습니다. 이를 극복하려면 각 페이지를 파싱하여 영어 단어를 설명하는 섹션이 있는지 알아 내야합니다 . 위키 텍스트 구문 분석은 사소한 작업이 아니지만 귀하의 경우에는 그렇게 나쁘지 않습니다. 거의 모든 경우를 다루려면 위키 텍스트에 English제목이 포함되어 있는지 확인하면됩니다 . 사용하는 프로그래밍 언어에 따라 위키 텍스트에서 AST 를 빌드하는 몇 가지 도구를 찾을 수 있습니다 . 이것은 대부분의 경우를 다루지 만 Wiktionary에는 몇 가지 일반적인 맞춤법 오류가 포함되어 있기 때문에 전부는 아닙니다.

대안으로 Lingua Robot 또는 이와 유사한 것을 사용해 볼 수 있습니다. Lingua Robot은 위키 낱말 사전 콘텐츠를 구문 분석하고이를 REST API로 제공합니다. 비어 있지 않은 응답은 단어가 존재 함을 의미합니다. Wiktionary와 달리 API 자체에는 맞춤법 오류가 포함되어 있지 않습니다 (적어도이 답변을 작성하는 순간). 또한 위키 낱말 사전에는 단어뿐만 아니라 여러 단어로 된 표현도 포함되어 있습니다.



0

어원 및 발음 데이터 구문 분석을 시작합니다.

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}}
}

업데이트 : 여기 에 더 구체화 된 요점이 있습니다.


감사합니다. 브라우저 devtools 콘솔에서 실행 해 보았습니다. 무엇 langs입니까?
knb

1
요점으로 업데이트되어 langs수천 줄이 너무 커서 너무 큽니다.
Lance Pollard
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.