我可以很容易地得到一个包含维基词典中所有标题的转储,但是这个转储包含每个单词,甚至是非英语单词。
例如,您可以找到souris
(mouse
法语):https ://en.wiktionary.org/wiki/souris
是否有一种简单的方法或现有的脚本来仅获取一种特定语言的标题。我想从维基词典中获取所有英语单词,不包括该语言中不存在的单词。
到目前为止,我唯一的想法是解析文本并检查是否有==English==
一行,但它太慢而无法使用。
我可以很容易地得到一个包含维基词典中所有标题的转储,但是这个转储包含每个单词,甚至是非英语单词。
例如,您可以找到souris
(mouse
法语):https ://en.wiktionary.org/wiki/souris
是否有一种简单的方法或现有的脚本来仅获取一种特定语言的标题。我想从维基词典中获取所有英语单词,不包括该语言中不存在的单词。
到目前为止,我唯一的想法是解析文本并检查是否有==English==
一行,但它太慢而无法使用。
我认为您需要:
我尝试了选项 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 的限制不会让我
根据@serans 的回答,我创建了一个 GitHub Gist 在 Swift 中做同样的事情
https://gist.github.com/ashleymills/549ab8aff05ec90f4350#file-wiktionaryfetcher-swift
serans 发布的解决方案和代码示例很棒,但我无法让他的 python 代码运行。
我按照他的例子写了一个 ruby 版本:
#!/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