Как получить содержание слова из Викисловаря? - PullRequest
81 голосов
/ 05 мая 2010

Как можно использовать API Викисловаря, чтобы определить, существует ли слово?

Ответы [ 7 ]

60 голосов
/ 05 мая 2010

API Wiktionary можно использовать для запроса, существует ли слово.

Примеры для существующих и несуществующих страниц:

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.

24 голосов
/ 03 декабря 2010

Есть несколько предостережений при проверке того, что в Викисловарь есть страница с именем, которое вы ищете:

Предупреждение # 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)

Если они не включены в то, что вы хотите, вам придется загрузить и проанализировать сам вики-текст, что не является тривиальной задачей.

18 голосов
/ 18 августа 2011

Вы можете загрузить дамп Викисловарных данных . Больше информации в FAQ . Для ваших целей определений дампа , вероятно, является лучшим выбором, чем дамп XML.

8 голосов
/ 25 марта 2012

Чтобы все было действительно просто, извлеките слова из дампа так:

bzcat pages-articles.xml.bz2 | grep '<title>[^[:space:][:punct:]]*</title>' | sed 's:.*<title>\(.*\)</title>.*:\1:' > words
2 голосов
/ 20 марта 2018

Если вы используете 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')
1 голос
/ 24 января 2011

Возможно, вы захотите попробовать JWKTL. Я только что узнал об этом;)

http://en.wikipedia.org/wiki/Ubiquitous_Knowledge_Processing_Lab#Wiktionary_API

http://www.ukp.tu -darmstadt.de / Программное обеспечение / jwktl /

0 голосов
/ 09 июня 2019

Вот начало анализа данных этимологии и произношения:

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

Обновление : Здесь - это суть, более понятная.

...