代码之家  ›  专栏  ›  技术社区  ›  Armentage

如何检索Wiktionary word内容?

  •  79
  • Armentage  · 技术社区  · 16 年前

    Wiktionary的API如何确定一个单词是否存在?

    6 回复  |  直到 12 年前
        1
  •  74
  •   Dave Jarvis James Eichele    12 年前

    这个 Wiktionary API 可用于查询单词是否存在。

    http://en.wiktionary.org/w/api.php?action=query&titles=test http://en.wiktionary.org/w/api.php?action=query&titles=testx

    第一个链接提供了关于其他类型格式的示例,这些格式可能更容易解析。

    要以小型XHTML格式检索word的数据(如果需要更多的数据),请请求页面的可打印版本:

    http://en.wiktionary.org/w/index.php?title=test&printable=yes http://en.wiktionary.org/w/index.php?title=testx&printable=yes

    然后可以用任何标准的XML解析器解析这些内容。

        2
  •  29
  •   hippietrail    10 年前

    在检查Wiktionary是否有一个包含您要查找的名称的页面时,需要注意以下几点:

    :所有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 :某些Wiktionaries允许存根条目很少或没有关于术语的信息。这在一些维基词典中很常见,但在英语维基词典中却不常见。但现在似乎也传到了英国维基词典: https://en.wiktionary.org/wiki/%E6%99%B6%E7%90%83 (permalink用于填充存根的时间,以便您仍然可以看到存根的外观: https://en.wiktionary.org/w/index.php?title=%E6%99%B6%E7%90%83&oldid=39757161 )

    如果这些内容没有包含在您想要的内容中,那么您将不得不加载和解析wikitext本身,这不是一项简单的任务。

        3
  •  19
  •   drac_o Ipkiss    6 年前

    你可以下载一堆 Wikitionary data FAQ . 为了你的目的 definitions dump 可能是比xml转储更好的选择。

        4
  •  9
  •   benroth    14 年前

    为了保持简单,从垃圾堆中提取如下单词:

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

    如果您使用的是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')
    
        7
  •  1
  •   Roman Kishchenko    6 年前

    如前所述,这种方法的问题是 Wiktionary提供所有语言的所有单词的信息 . 因此,使用wikipediaapi检查页面是否存在的方法是行不通的,因为有很多非英语单词的页面。为了克服这个问题, 你需要分析每一页,找出是否有一节描述英语单词 . 解析wikitext并不是一个简单的任务,尽管在你的情况下也不是那么糟糕。要覆盖几乎所有的案例,您只需检查wikitext是否包含 English 方向。根据您使用的编程语言,您可以找到一些工具来构建 AST

    作为替代,你可以尝试使用 Lingua Robot 或者类似的东西。LinguaRobot解析Wiktionary内容并将其作为RESTAPI提供。非空响应表示单词存在。请注意,与Wiktionary相反,API本身不包含任何拼写错误(至少在编写这个答案时是这样)。另外请注意Wiktionary不仅包含单词,还包含多单词表达式。

        9
  •  0
  •   Lance Pollard    7 年前

    以下是分析词源和发音数据的开始:

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

    更新 : Here 是一个更加充实的要点。