2016-06-09 2 views
-1

Привет У меня есть скрипт, который может удалить подзаголовки и абзацы, но я не могу удалить абзацы с неглавыми подзаголовками и словами.Удаление неанглийских заголовков и абзацев

Например, (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. 

(Результат) я получаю от моего кода:

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. 

Это то, что я надеюсь достичь (Желаемый результат):

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. 

Сценарий выглядит следующим образом:

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

Проблема: Пока мой код способен удалить пункты с подзаголовком известных имен, таких как «Внешние ссылки».

Но удаляю ли эти подзаголовки и абзацы, которые не являются английскими?

спасибо.

+4

Вы пытались выполнить поиск в Интернете для библиотек, которые обнаруживают языки? Беглый поиск привел к этому: https://pypi.python.org/pypi/langdetect? –

+0

Если вы заранее знаете все возможные (английские) заголовки, которые вы можете встретить, просто проверьте, находится ли заголовок в вашем списке (лучше используйте 'set' на самом деле) и пропустите весь абзац, если это не так. – Julien

+0

Привет, Жюльен. Я понятия не имею о всех возможных английских заголовках, таким образом, там, где моя проблема. – windboy

ответ

1

Если вы хотите, чтобы обнаружить, если строка содержит не английские символы, то будет просто: просто попытаться декодировать его как ascii: если это не удается, он содержит символ с кодом выше 127:

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

Если вы хотите определить, содержит ли он не английский слова, что гораздо более сложный вопрос, и вам следует задаться вопросом, хотите ли вы принять плохо написанные английские слова, такие как englich woerds badli writed. Удачи, если вы хотите пойти этим путем ...

+1

Английская орфография позволяет использовать диакритические знаки в словах, таких как * zöology * и * résumé *, поэтому в лучшем случае это приблизительный подход. В таком ресурсе, как Википедия, такие слова, скорее всего, будут исправлены в правильной форме дотошными редакторами, даже если новички, скорее всего, будут вводить их без диакритики. – tripleee

+0

Я попробую. Большое спасибо. – windboy

+0

Пакет ['langdetect'] (https://pypi.python.org/pypi/langdetect), предложенный @ juanpa.arrivillaga, хорошо себя ведет с этими словами:' detect_langs («englich woerds badli writed») 'возвращает' [ ан: 0,999994655212] '. Так как эвристический инструмент, похоже, хорошо работает :) (в дополнение к тому, чтобы вести себя правильно с кредитными словами). – MariusSiuram

Смежные вопросы