2016-12-19 4 views
1

Ich schrieb das folgende Programm, um die englischen Wörter in a ta.wikipedia page zu lösen. Delink bedeutet das Entfernen von eckigen Klammern, die vor und nach den englischen Wörtern stehen. Ich bin neu in PAWS (Pywikibot). Es scheint, dass die Entfernung durch Regex (A-Z, a-z) erfolgen kann. Wie?Was ist die Regex, um irgendwelche englischen Wörter zum Suchen und Ersetzen Modus von Pywikibot zu finden

import pywikibot 
import re 

    site = pywikibot.Site('ta', 'wikipedia') 
    page = pywikibot.Page(site, title) 
    page.text = page.text.replace('[[Eudicots]]','Eudicots') 
    page.save() 

Entschuldigung für mein English.English ist eine Brückensprache für mich. Ich frage nicht, um zu debuggen. Aber, wie man die folgende wiederholte Art des Codes vermeidet. zum Beispiel hilft der folgende Code 26 (alphabetisch), die [[Klammern zu entfernen.

Dann muss ich Kleinbuchstaben entfernen, die immer am Ende eines Wortes ist. Denn jedes Wort endet in Kleinbuchstaben. um Kleinbuchstaben zu entfernen, muss ich den folgenden Code schreiben,

page.text = page.text.replace('a]]','a') 
    page.text = page.text.replace('b]]','b') 
    page.text = page.text.replace('c]]','c') 
    page.text = page.text.replace('d]]','d') 
    (likewise, for all the 26 English letters) 
    page.text = page.text.replace('x]]','x') 
    page.text = page.text.replace('y]]','y') 

Ich denke, das ist nicht gut Codierung. Also ich möchte Regex verwenden. Ich hoffe, dass ich die Notwendigkeit für das Wikimedia-Projekt eingerichtet habe.

Mit anderen Worten, ich möchte englische Wort Klammern nur nicht die englischen Wörter entfernen.

Antwort

0

Einige PCRE-kompatible Regular Expression-Bibliotheken können Zeichenklassen basierend auf ihren Unicode-Eigenschaften zuordnen (z. B. \p{Latin} würde mit jedem Zeichen eines lateinischen Skripts übereinstimmen), Pythons Modul re jedoch nicht. Es gibt andere Python-Module, die Sie stattdessen verwenden könnten (this answer hat die Details), aber solange Sie nur nach ASCII-Zeichen suchen, ist es einfacher, eine eigene Zeichenklasse zu erstellen: [A-Za-z] entspricht einem einzelnen Zeichen innerhalb dieser Bereiche und re.sub('([A-Za-z])]]', '\\1', text) Behalte diesen Charakter und verwerfe die Klammern.

+0

Aber es entfernt nur] Klammer. siehe [https://ta.wikipedia.org/w/index.php?title=%E0%AE%AA%E0%AE%AF%E0%AE%A9%E0%AE%B0%E0%AF%8D % 3AInfo-bauer% 2FPAWS & typ = revision & diff = 2156707 & oldid = 2156706] page = pywikibot.Page (site, titel) page.text = re ('([A-Za-z])]]', '\\ 1 ', page.text) page.save() –

+0

Und auch, sollte es nicht die Klammern von Interwiki-Links Beispiel entfernen, [[: de: Parkia speciosa]] –

+1

Ich bin sicher, es ist nicht schwer, zu Anrufen zu kombinieren:) Wenn Sie sie in einer einzigen Regex haben wollen, funktioniert etwas wie '(\ [\ [|]]) (?! [A-Za-z])'. Befreit interwikis ist nicht etwas, für das Regexes ein gutes Werkzeug sind. Sie können 're 'mit einem Callback versuchen, aber wahrscheinlich besser etwas wie [mwparserfromhell] (https://github.com/earwig/mwparserfromhell) verwenden. – Tgr

Verwandte Themen