2013-03-18 18 views
7

我可以很容易地得到一個dump與所有標題在wiktionary,但這個轉儲包含每一個字,即使是非英語的。簡單的方法只能用一種語言獲得wiktionary標題?

例如,你會發現sourismouse法文):https://en.wiktionary.org/wiki/souris

有沒有一種簡單的方法或現有的腳本來獲得的冠軍,在一個特定語言。我想從wiktionary中獲得所有英文單詞,但不包括這種語言中不存在的單詞。

到目前爲止,我唯一的想法是解析文本並檢查是否存在==English==行,但它太慢而無法使用。

回答

5

我想你會需要:

  • 解析在維基詞典,這是從一個數據庫轉儲中提取的現有的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') 

我粘貼結果引擎收錄自己,但500KB的限制不會讓我

+0

尼斯解!謝謝! – 2013-03-20 10:22:57

0

的解決方案和示例代碼瑟朗貼是偉大的,但我有麻煩讓他的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 
相關問題