2013-03-18 41 views
7

Tôi có thể dễ dàng nhận được một dump với tất cả các tiêu đề trong wiktionary, nhưng bãi chứa này chứa mọi từ, kể cả những từ không phải tiếng Anh.Cách dễ dàng để tải wiktionary tiêu đề chỉ bằng một ngôn ngữ?

Ví dụ, bạn tìm souris (mouse bằng tiếng Pháp): https://en.wiktionary.org/wiki/souris

Có một cách dễ dàng hoặc một kịch bản có sẵn để có được chỉ các chức danh trong một ngôn ngữ cụ thể . Tôi muốn nhận được tất cả các từ tiếng Anh từ wiktionary, ngoại trừ những từ không tồn tại trong ngôn ngữ này.

Cho đến nay ý tưởng duy nhất của tôi là phân tích cú pháp văn bản và kiểm tra xem có dòng ==English== hay không nhưng quá chậm để có thể sử dụng được.

Trả lời

5

Tôi nghĩ rằng bạn sẽ cần một trong hai:

  • phân tích danh sách đã tồn tại của english words trong Wiktionary tiếng Việt, được chiết xuất từ ​​một bãi chứa cơ sở dữ liệu.
  • tải xuống kết xuất cơ sở dữ liệu (và không chỉ các tiêu đề) và tự trích xuất các thuật ngữ.

Tôi đã thử tùy chọn a) chỉ vì tùy chọn b) sẽ ngụ ý tải xuống một vài GB. Rất đơn giản, trên thực tế, tôi bao gồm triển khai JS nhanh chóng mà bạn có thể sử dụng làm cơ sở để tạo tập lệnh của riêng mình bằng ngôn ngữ ưa thích.

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

EDIT Tôi đã khá tò mò về vấn đề bản thân mình, vì vậy tôi đã viết một kịch bản python. Chỉ trong trường hợp ai đó tìm thấy nó hữu ích:

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') 

Tôi muốn dán kết quả vào pastebin bản thân mình nhưng giới hạn 500kb sẽ không cho phép tôi

+0

đẹp dung dịch! Cảm ơn! –

0

Các giải pháp và mã mẫu Serans gửi là tuyệt vời, nhưng tôi đã gặp khó khăn khi lấy mã python của mình để chạy.

Tôi đi theo tấm gương của ông và đã viết một phiên bản 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 
Các vấn đề liên quan