2013-03-18 17 views
7

Posso ottenere facilmente un dump con tutti i titoli nel wiki, ma questo dump contiene ogni parola, anche non inglese.Un modo semplice per ottenere titoli wiktionary solo in una lingua?

Per esempio, a trovare souris (mouse in francese): https://en.wiktionary.org/wiki/souris

c'è un modo facile o uno script esistente per ottenere solo i titoli in uno specifico lingua. Vorrei ottenere tutte le parole inglesi dal wiki, escludendo quelle che non esistono in questa lingua.

Finora la mia unica idea è di analizzare il testo e verificare se esiste una riga ==English==, ma è troppo lenta per essere utilizzabile.

risposta

5

penso che avrete bisogno di uno:

  • analizzare l'elenco già esistente di english words nel Wikizionario, che sono stati estratti da un dump del database.
  • scaricare il dump del database (e non solo i titoli) ed estrarre i termini da soli.

Ho provato l'opzione a) solo perché l'opzione b) implicherebbe un download di diversi GB. È molto semplice, infatti includo un'implementazione JS veloce che puoi usare come base per creare il tuo script nella tua lingua preferita.

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 ero molto curioso su questo argomento me, così ho scritto uno script python. Solo nel caso qualcuno lo trova utile:

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

mi piacerebbe incollare i risultati per pastebin me stesso, ma il limite di 500 KB non mi permette di

+0

Nizza soluzione! Grazie! –

0

la soluzione ed esempi di codice serans postato erano grandi, ma ho avuto problemi nel far funzionare il suo codice Python.

ho seguito il suo esempio e ha scritto una versione 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