2016-06-09 7 views
-1

Hallo Ich habe ein Skript, das Unterüberschriften und Absätze entfernen kann, aber ich bin nicht in der Lage, Absätze mit nicht englischen Unterüberschriften und Wörtern zu entfernen.Entfernen von nicht-englischen Unterüberschriften und Paragraphen

Zum Beispiel (Original Text):

=== Personal finance === 
Protection against unforeseen personal events, as well as events in the wider economies 
Transference of family wealth across generations (bequests and inheritance) 

=== Corporate finance === 
Corporate finance deals with the sources of funding and the capital structure of corporations and the actions that managers take to increase the value of the firm to the shareholders. 

== External links == 
Business acronyms and abbreviations 
Business acronyms 

== Kūrybinės Industrijos == 
Kūrybinės industrijos apima sritį ekonominių veiksnių, susitelkusių ties žinių ir informacijos generavimu arba tyrimu. 

Das (Ergebnis) ich von meinem Code zu erhalten ist:

Protection against unforeseen personal events, as well as events in the wider economies 
Transference of family wealth across generations (bequests and inheritance) 

Corporate finance deals with the sources of funding and the capital structure of corporations and the actions that managers take to increase the value of the firm to the shareholders. 

Kūrybinės industrijos apima sritį ekonominių veiksnių, susitelkusių ties žinių ir informacijos generavimu arba tyrimu. 

Dies ist, was ich hoffe, erreicht (Gewünschtes Ergebnis):

Protection against unforeseen personal events, as well as events in the wider economies 
Transference of family wealth across generations (bequests and inheritance) 

Corporate finance deals with the sources of funding and the capital structure of corporations and the actions that managers take to increase the value of the firm to the shareholders. 

Das Skript ist wie folgt:

import re 
from subprocess import call 

f1 = open('asd.text', 'r') # read file that contains the orginal text 
f2 = open('NoRef.text', 'w') # write to new file 

section_title_re = re.compile("^=+\s+.*\s+=+$") 

content = [] 
skip = False 
for l in f1.read().splitlines(): 
    line = l.strip() 

    if "== external links ==" in line.lower(): 
     skip = True 
     continue 

    if section_title_re.match(line): 
     skip = False 
     continue 
    if skip: 
     continue 
    content.append(line) 

content = '\n'.join(content) + '\n' 
f2.write(content+"\n") 
f2.close() 

Problem: Bisher mein Code ist in der Lage Absätze mit Hierher bekannten Namen wie „Externe Links“ zu entfernen.

Aber entferne ich die Unterüberschriften und Absätze, die nicht Englisch sind?

Vielen Dank.

+4

Haben Sie versucht, nach Bibliotheken zu googeln, die Sprachen erkennen? Eine kursorische Suche brachte folgendes: https://pypi.python.org/pypi/langdetect? –

+0

Wenn Sie im Voraus alle möglichen (englischen) Überschriften kennen, überprüfen Sie einfach, ob die Überschrift in Ihrer Liste steht (verwenden Sie lieber ein 'Set') und überspringen Sie den ganzen Absatz, wenn dies nicht der Fall ist. – Julien

+0

Hallo Julien Ich habe keine Ahnung von all den möglichen englischen Überschriften, daher gibt es mein Problem. – windboy

Antwort

1

Wenn Sie nur erkennen soll, ob ein String nicht Englisch Zeichen enthält, das ist einfach: nur versuchen, es als ascii zu entschlüsseln: wenn es fehlschlägt, enthält es Zeichen mit dem Code über 127:

try: 
    utxt = txt.decode('ascii') 
except: 
    # txt contains non "english" characters 
    ... 

Wenn Sie will erkennen, ob es nicht englisch worte, dass eine viel komplexere Frage, und Sie sollten sich fragen, ob Sie englische Wörter schlecht geschrieben, wie englich woerds badli writed akzeptieren wollen. Viel Glück, wenn Sie diesen Weg gehen wollen ...

+1

Englische Rechtschreibung erlaubt Diakritika in Lehnwörter wie * zöology * und * resumé *, also ist dies ein annähernder Ansatz bestenfalls. In einer Quelle wie Wikipedia werden solche Wörter wahrscheinlich von akribischen Redakteuren in die richtige Form korrigiert, selbst wenn Anfänger sie ursprünglich ohne diakritische Zeichen eingeben. – tripleee

+0

Ich werde das versuchen. Vielen Dank. – windboy

+0

Das von @ juanpa.arrivillaga vorgeschlagene Paket ['langdetect'] (https://pypi.python.org/pypi/langdetect) verhält sich ziemlich gut mit diesen Worten:' detect_langs ("englich woerds badli writed") 'return' [ en: 0.999994655212] '. Also als heuristisches Werkzeug, scheint es einen guten Job zu machen :) (zusätzlich zu Lehwörter richtig zu verhalten). – MariusSiuram

Verwandte Themen