2013-03-18 9 views
7

Mogę łatwo uzyskać dump ze wszystkimi tytułami w Wikisłowniku, ale ten zrzut zawiera każde słowo, nawet nieangielskie.Łatwy sposób na uzyskanie tytułów wiktionarnych tylko w jednym języku?

Na przykład, można znaleźć souris (mouse w języku francuskim): https://en.wiktionary.org/wiki/souris

Czy istnieje prosty sposób lub istniejący skrypt dostać tylko tytuły w jednym konkretnego języku. Chciałbym uzyskać wszystkie angielskie słowa z tego słowa, z wyjątkiem tych, które nie istnieją w tym języku.

Do tej pory moim jedynym pomysłem jest przeanalizowanie tekstu i sprawdzenie, czy istnieje linia ==English==, ale jest zbyt wolna, aby można ją było wykorzystać.

Odpowiedz

5

myślę, że trzeba albo:

  • przetworzyć już istniejącą listę english words w Wikipedii, które zostały wyodrębnione z zrzutu bazy danych.
  • pobierz zrzut bazy danych (a nie tylko tytuły) i wyodrębnij warunki samodzielnie.

Próbowałem opcji a) tylko dlatego, że opcja b) implikowałaby pobranie kilku GB. To bardzo proste, w rzeczywistości dołączam szybką implementację JS, której możesz użyć jako podstawy do stworzenia własnego skryptu w preferowanym języku.

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 Byłem bardzo ciekaw na temat siebie, więc napisałem skrypt Pythona. Na wszelki wypadek ktoś znajdzie przydatne:

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

będę wklejać wyniki do Pastebin siebie, ale limit 500kb nie pozwoli mi

+0

Nicea rozwiązanie! Dzięki! –

0

roztworu i kod próbki Serans pisał były świetne, ale miałem problem z uruchomieniem kodu Pythona.

I poszli za jego przykładem i napisał wersji 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 
Powiązane problemy