只用一种语言获取wiktionary标题的简单方法?

时间:2013-03-18 12:45:24

标签: mediawiki-api wiktionary

我可以很容易地获得一个dump的所有标题,但是这个转储包含每个单词,甚至包括非英语单词。

例如,您发现souris(法语为mouse):https://en.wiktionary.org/wiki/souris

是否有一种简单的方法或现有的脚本只能用一种特定的语言 标题。我想从wiktionary获得所有英语单词,不包括那种语言中不存在的单词。

到目前为止,我唯一的想法是解析文本并检查是否有==English==行,但它太慢而无法使用。

3 个答案:

答案 0 :(得分:5)

我认为你需要:

  • 解析wikitionary中已存在的english words列表,这些列表是从数据库转储中提取的。
  • 下载数据库转储(而不仅仅是标题)并自行提取条款。

我尝试了选项a)只是因为选项b)意味着几GB的下载。 这很简单,事实上我包含了一个快速JS实现,您可以将其用作基础,以您的首选语言创建自己的脚本。

var baseURL="http://en.wiktionary.org/wiki/Index:English/"
var letters=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']

for(i=0;i<letters.length;i++) {
    var letter = letters[i];
    console.log(letter);
    $.get(baseURL+letter, function(response) { 
        $(response).find('ol li a').each( function (k,v) { console.log(v.text) })    
    })
}

修改 我自己对这个主题很好奇,所以我写了一个python脚本。以防有人发现它有用:

from lxml.cssselect import CSSSelector
from lxml.html import fromstring
import urllib2

url = 'http://en.wiktionary.org/wiki/Index:English/'
letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
for l in letters:
    req = urllib2.Request(url+l, headers={'User-Agent' : "Magic Browser"}) 
    con = urllib2.urlopen( req )
    response = con.read()
    h = fromstring(response)
    sel = CSSSelector("ol li a")

    for x in sel(h):
        print x.text.encode('utf-8')

我会自己将结果粘贴到pastebin,但500kb的限制不会让我

答案 1 :(得分:0)

serans发布的解决方案和代码示例很棒,但是我无法运行他的python代码。

我按照他的例子写了一个红宝石版本:

#!/usr/bin/env ruby

require 'net/http'
require "rexml/document"

url = 'http://en.wiktionary.org/wiki/Index:English/'

('a'..'z').to_a.each do |letter|
  response = Net::HTTP.get(URI(url + letter))
  doc = REXML::Document.new(response)
  REXML::XPath.each(doc, "//ol/li/a") do |element|
    puts element.text
  end
end

答案 2 :(得分:0)

来自@ serans&#39;回答,我已经创建了一个GitHub Gist来在Swift中做同样的事情

https://gist.github.com/ashleymills/549ab8aff05ec90f4350#file-wiktionaryfetcher-swift