Benutzer:MTheiler/PyWikiLemmaTranslator

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Der PyWikiLemmaTranslator mit Zugriff auf Wikidata zur Übersetzung von Links ist ein einfaches Python - Programm zur Installation auf dem eigenen PC. Es dient als Hilfsmittel für Wikipedia-Autoren, die Wikipedia-Artikel von einer Sprache in eine andere Sprache, also z.B. von Englisch nach Deutsch, übersetzen. Bei einem solchen Übersetzungsvorgang muß für jeden Link in der Ausgangssprache geprüft werden, ob in der eigenen Sprache eventuell ein korrespondierendes Lemma verfügbar ist. Dieser Arbeitsschritt kann mit dem PyWikiLemmaTranslator automatisiert werden. Hierzu wird ein Ausschnitt aus dem Quelltext des zu übersetzenden Wikipedia-Artikels in eine lokale Datei "input.txt" kopiert. Dieses Programm sucht dann in dieser Datei alle internen Links, die durch die doppelten eckigen Klammern [[ bzw. ]] erkannt werden, und ermittelt dann mit Hilfe von Wikidata in der Zielsprache die eventuell vorhandenen korrespondierenden Links. Als Ergebnis wird eine zweisprachige Liste dieser Links ausgegeben. Beispiele der Ausgabe: siehe unten.

Funktionsweise[Bearbeiten | Quelltext bearbeiten]

Intern wird zum Zugriff auf die in Wikidata hinterlegten Informationen die Bibliothek Pywikibot benutzt.

Installationsvorgang[Bearbeiten | Quelltext bearbeiten]

  1. Herunterladen (z.B. von heise.de) und Installation von Python laut Anleitung.
  2. Installation von Pywikibot. Dies kann z.B. auf der Kommandozeile mit dem Befehl: "pip install --user pywikibot" geschehen. Zur Installation von Pywikibot gehört auch das Erstellen der Datei: user-config.py. Siehe hierzu: https://www.mediawiki.org/wiki/Manual:Pywikibot/user-config.py
  3. Auf dem lokalen PC werden in ein beliebiges Verzeichnis folgende 3 Dateien kopiert: dieses Python-Programm direkt von dieser Seite unter dem Namen PyWikiLemmaTranslator.py, das oben beschriebene und befüllte user-config.py und die Datei input.txt. Nach input.txt kopieren wir den Quelltext des zu übersetzenden Artikels.
  4. Der PyWikiLemmaTranslator kann mit verschiedenen Kombinationen von Sprachen sowie verschiedenen Wikis umgehen. Hierzu müssen dann aber die entsprechenden Sprachen konfiguriert werden. Die Ausgangssprache, die wir übersetzen wollen, ist languageFrom. Sie steht per default auf 'en', also englisch und muss natürlich mit der Sprache in input.txt übereinstimmen. Bei der Übersetzung anderssprachlicher Texte ist dies entsprechend anzupassen. - languageTarget ist diejenige Sprache, in die ich übersetzen will, meist meine Muttersprache. Sie steht per default auf 'dewiki', also deutsch. - Das wiki in der Konfiguration ist wikipedia.

Programmbenutzung[Bearbeiten | Quelltext bearbeiten]

Unter Windows wurde bei der Python-Installation automatisch IDLE installiert. Mit Hilfe dieser Umgebung läßt sich PyWikiLemmaTranslator.py öffnen und mit der Taste F5 ausführen. Die zweisprachige Liste der Links wird einem eigenen Fenster ausgegeben. Danach kann input.txt mit neuen Texten gefüllt werden.

Programmcode[Bearbeiten | Quelltext bearbeiten]

# PyWikiLemmaTranslator, Author: MTheiler ; date: 2019-04-14, version: 0.1 
#
# This programm reads the file: input.txt (containing text of Wikipedia in a foreign language,
# e.g. content of https://en.wikipedia.org/wiki/Bag-of-words_model)
# 
#
# The program reads all the links in this Text, e.g. [[document classification]],
# consults wikidata to get the corresponding links in your own language e.g. [[Dokumenten_Klassifikation]]
# and prints the result.
#
# The output ist a list of links in two different languages.
# The languages must be configured in this file (see below). Default: from english to german
# The python library Pywikibot must be installed.
#
# installation:
# 1. install python
# 2. install Pywikibot via "pip install --user pywikibot" on the commandline
# 3. put this program, user-config.py (used by pywikibot) and your input.txt in any directory on your local machine.
# 4. Configure the languages and copy text fom wikipedia into "input.txt"
# Run this program e.g. by opening it with IDLE and press F5.
# 
# see:   https://www.mediawiki.org/wiki/Manual:Pywikibot/Wikidata
# see:   https://www.wikidata.org/wiki/Wikidata:Pywikibot_-_Python_3_Tutorial
 
import pywikibot
import re

# change the following settings
languageFrom='en'  # language of the input, e.g. en, it, fr, ...
wiki='wikipedia'   # wikipedia or wikivoyage
languageTarget='dewiki' # we translate into this language e.g. 'dewiki', 'frwiki', etc.

def getIDfromWikidata(lemma):
    listy = [] # where the needed output is put in
    listy.append(lemma)
    site = pywikibot.Site(languageFrom, wiki) # The site we want to run our bot on
    page = pywikibot.Page(site, lemma)
    try:
        item = pywikibot.ItemPage.fromPage(page)  # this can be used for any page object
        dictionary=item.get()  # you need to call it to access any data.
        id=item.getID()
        listy.append(id)
        sitelinks=dictionary['sitelinks']  # key=wikixx ; value=lemma
        # uncomment next line to see the sitelinks
        # print(sitelinks)  
        lemmaTarget=sitelinks[languageTarget]
        listy.append(lemmaTarget)
    except:
        id="redlink"
        listy.append(id)
        listy.append(id)
    return listy

def getIDfromWikidataDummy(lemma):
    listy = [] # where the needed output is put in
    listy.append(lemma)
    listy.append("dummy")
    listy.append("dummy")
    return listy


def entferneKlammern(strWithKlammern):
    # transforms "[[Town]] to "Town"
    strOhneKlammern=strWithKlammern
    strOhneKlammern.replace("[[","")
    strOhneKlammern.replace("]]","")
    return strOhneKlammern

# test of "|" ; if yes we use the left side;
def getLeftOrAll(strLemmaAndView):
    strReturn=strLemmaAndView # no delimiter; we take all
    positionOfTrenner = strLemmaAndView.find("|")
    if positionOfTrenner>0:
        # delimiter found
        strReturn=strLemmaAndView[0:positionOfTrenner]
    return strReturn


def findOneLemma(myString):
    res = re.search(r"(.*)\[\[(.*)\]\](.*)",myString)

    linkeSeite=""
    rechteSeite=""
    if res:
        linkeSeite=res.group(1)
        lemmaSourceLanguage=res.group(2)
        rechteSeite=res.group(3)
        # 
        lemmaOhne=getLeftOrAll(entferneKlammern(lemmaSourceLanguage))
        oneIDwithLemma=getIDfromWikidata(lemmaOhne)
        print("[["+lemmaSourceLanguage+"]]  [["+oneIDwithLemma[2]+"]]  ")

    return(linkeSeite)
    
# file = open("input.txt", encoding='utf-8')
file = open("input.txt")
print("======= translationList========")
for zeile in file:
     leftSide=findOneLemma(zeile)
     while(len(leftSide)>1):
         leftSide=findOneLemma(leftSide)

Beispiel: von Englisch nach Französisch[Bearbeiten | Quelltext bearbeiten]

Konfiguration:

languageFrom='en' 
wiki='wikipedia' 
languageTarget='frwiki'

Ausgabe (Bei nicht existierenden Lemmas wird als Übersetzung der Text "redlink" ausgegeben)

[[Python (programming language)|Python]]  [[Python (langage)]]  
[[asdf]]  [[redlink]] 
[[Library (computing)|Library]]  [[Bibliothèque logicielle]]

Beispiel: von Französisch nach Italienisch[Bearbeiten | Quelltext bearbeiten]

Konfiguration:

languageFrom='fr' 
wiki='wikipedia' 
languageTarget='itwiki'

Ausgabe:

[[langage]]  [[Linguaggio]]  
[[Bibliothèque]]  [[Biblioteca]]

Beispiel für user-config.py[Bearbeiten | Quelltext bearbeiten]

mylang = 'de'
usernames['wikipedia']['de'] = u'BeispielBot'