2017-02-17 23 views
0

У меня возникла проблема с преобразованием слова-export-html-файла. Мне нужно было получить текст .doc-файла со всей информацией о стиле (жирный, курсив ...). Очиститель тегов в моем коде работает хорошо, и теперь у меня есть result.txt только с тегами.Сочетание различных строк в длинном .txt в python

Проблема в том, что html-export разделяет строки, где это не должно. Он мог бы поставить \ n между одной строкой.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
 
<HTML> 
 
<HEAD> 
 
    <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8"> 
 
    <TITLE>19</TITLE> 
 
    <META NAME="GENERATOR" CONTENT="OpenOffice 4.1.3 (Unix)"> 
 
    <META NAME="AUTHOR" CONTENT="IGM"> 
 
    <META NAME="CREATED" CONTENT="20160425;12590000"> 
 
    <META NAME="CHANGEDBY" CONTENT="Arno Michalowski"> 
 
    <META NAME="CHANGED" CONTENT="20160425;13460000"> 
 
    <META NAME="SDFOOTNOTE" CONTENT=";;;;C"> 
 
    <STYLE TYPE="text/css"> 
 
    <!-- 
 
     @page { margin-right: 3.6cm; margin-top: 2.4cm; margin-bottom: 3.4cm } 
 
      P { margin-left: 2cm; text-indent: -2cm; margin-bottom: 0.21cm; direction: ltr; color: #000000; line-height: 0.49cm; text-align: justify; widows: 2; orphans: 2 } 
 
      P.western { font-family: "Times", serif; font-size: 12pt; so-language: de-DE } 
 
      P.cjk { font-family: "Times New Roman", serif; font-size: 12pt } 
 
      P.ctl { font-family: "Times", serif; font-size: 10pt; so-language: ar-SA } 
 
      P.sdfootnote-western { margin-left: 3cm; text-indent: -1cm; margin-bottom: 0cm; font-family: "Times", serif; font-size: 10pt; so-language: de-DE; line-height: 0.42cm; text-align: left } 
 
      P.sdfootnote-cjk { margin-left: 3cm; text-indent: -1cm; margin-bottom: 0cm; font-family: "Times New Roman", serif; font-size: 10pt; line-height: 0.42cm; text-align: left } 
 
      P.sdfootnote-ctl { margin-left: 3cm; text-indent: -1cm; margin-bottom: 0cm; font-family: "Times", serif; font-size: 10pt; so-language: ar-SA; line-height: 0.42cm; text-align: left } 
 
      A.sdfootnoteanc { font-size: 57% } 
 
      A.sdfootnotesym-western { font-family: "Times", serif; font-size: 10pt } 
 
     A.sdfootnotesym-cjk { font-size: 10pt } 
 
     A.sdfootnotesym-ctl { font-family: "Times", serif } 
 
\t --> 
 
\t </STYLE> 
 
</HEAD> 
 
<BODY LANG="en" TEXT="#000000" DIR="LTR"> 
 
<DIV TYPE=HEADER> 
 
    <P LANG="de-DE" ALIGN=CENTER STYLE="margin-bottom: 0.9cm"><SDFIELD TYPE=PAGE SUBTYPE=RANDOM FORMAT=PAGE>184</SDFIELD></P> 
 
</DIV> 
 
<P LANG="de-DE" ALIGN=RIGHT STYLE="margin-left: 0.3cm; text-indent: 0cm; margin-bottom: 0cm; line-height: 0.42cm"> 
 
<FONT FACE="Courier, monospace"><FONT SIZE=2><SPAN STYLE="font-weight: normal"> \t </SPAN></FONT></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US"><SPAN STYLE="font-weight: normal">19</SPAN></SPAN></FONT></P> 
 
<P LANG="de-DE" CLASS="western" STYLE="margin-bottom: 0cm"><FONT FACE="Courier, monospace"><FONT SIZE=2><SPAN LANG="en-US"> \t </SPAN></FONT></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">1 \t \t </SPAN></FONT><FONT FACE="Times, serif"><I><B><SPAN LANG="en-US">M</SPAN></B></I></FONT><SUP><FONT FACE="Times, serif"><FONT SIZE=2><I><B><SPAN LANG="en-US">r</SPAN></B></I></FONT></FONT></SUP><FONT FACE="Times, serif"><I><B><SPAN LANG="en-US">. 
 
Bavoil</SPAN></B></I></FONT><FONT FACE="Courier, monospace"><FONT SIZE=2><SPAN LANG="en-US"> 
 
</SPAN></FONT></FONT><FONT FACE="Times, serif"><I><SPAN LANG="en-US">- 
 
56 ans - clincailler au quai au</SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">[</SPAN></FONT><FONT FACE="Times, serif"><I><SPAN LANG="en-US">x</SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">]</SPAN></FONT><FONT FACE="Times, serif"><I><SPAN LANG="en-US"> 
 
fleur</SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">[</SPAN></FONT><FONT FACE="Times, serif"><I><SPAN LANG="en-US">s</SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">]</SPAN></FONT><FONT FACE="Times, serif"><I><SPAN LANG="en-US"> 
 
-</SPAN></I></FONT></P> 
 
<P LANG="de-DE" CLASS="western" STYLE="margin-bottom: 0cm"><FONT FACE="Courier, monospace"><FONT SIZE=2><SPAN LANG="en-US"><I> \t </I></SPAN></FONT></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">2 \t \t \t </SPAN></FONT><FONT FACE="Times, serif"><I><SPAN LANG="en-US">100 
 
toujours l'ouïe</SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">°</SPAN></FONT><FONT FACE="Times, serif"><I><SPAN LANG="en-US"> 
 
dure</SPAN></I></FONT></P> 
 
<P LANG="de-DE" CLASS="western" STYLE="margin-bottom: 0cm"><FONT FACE="Courier, monospace"><FONT SIZE=2><SPAN LANG="en-US"> \t </SPAN></FONT></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">3 \t </SPAN></FONT><FONT FACE="Times, serif"><I><B><SPAN LANG="en-US"> \t 26 
 
mai</SPAN></B></I></FONT><SUP><FONT FACE="Times, serif"><FONT SIZE=2><A CLASS="sdfootnoteanc" NAME="sdfootnote1anc" HREF="#sdfootnote1sym"><SUP>1</SUP></A></FONT></FONT></SUP><FONT FACE="Courier, monospace"><FONT SIZE=2><SPAN LANG="en-US"><I> 
 
</I></SPAN></FONT></FONT><FONT FACE="Times, serif"><I><SPAN LANG="en-US">- 
 
l'oreille droite jette du pus depuis 6 ou 8 mois - ce mois</SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">[</SPAN></FONT><FONT FACE="Times, serif"><I><SPAN LANG="en-US">-</SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">]</SPAN></FONT></P> 
 
<P LANG="de-DE" CLASS="western" STYLE="margin-bottom: 0cm"><FONT FACE="Courier, monospace"><FONT SIZE=2><SPAN LANG="en-US"><I> \t </I></SPAN></FONT></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">4 \t \t \t </SPAN></FONT><FONT FACE="Times, serif"><I><SPAN LANG="en-US">ci 
 
encore plus - surdité de cette oreille depuis 2 mois</SPAN></I></FONT></P> 
 
<P LANG="de-DE" CLASS="western" STYLE="margin-bottom: 0cm"><FONT FACE="Times, serif"><I><SPAN LANG="en-US"> \t </SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">5 \t \t \t </SPAN></FONT><FONT FACE="Times, serif"><I><SPAN LANG="en-US">il 
 
a eu un coup d'air en route - depuis 15 ans il a eu</SPAN></I></FONT></P> 
 
<P LANG="de-DE" CLASS="western" STYLE="margin-bottom: 0cm"><FONT FACE="Times, serif"><I><SPAN LANG="en-US"> \t </SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">6 \t \t \t </SPAN></FONT><FONT FACE="Times, serif"><I><SPAN LANG="en-US">l'oreille 
 
dure alternativement l'une et l'autre -</SPAN></I></FONT></P> 
 
<P LANG="de-DE" CLASS="western" STYLE="margin-bottom: 0cm"><FONT FACE="Times, serif"><I><SPAN LANG="en-US"> \t </SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">7 \t \t \t </SPAN></FONT><FONT FACE="Times, serif"><I><SPAN LANG="en-US">maintenant 
 
alternativement aussi</SPAN></I></FONT></P> 
 
<P LANG="de-DE" CLASS="western" STYLE="margin-bottom: 0cm"><FONT FACE="Times, serif"><I><SPAN LANG="en-US"> \t </SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">8 \t \t \t </SPAN></FONT><FONT FACE="Times, serif"><I><SPAN LANG="en-US">douleur 
 
</SPAN></I></FONT><SUP><FONT FACE="Courier New, monospace"><SPAN LANG="en-US">┌</SPAN></FONT></SUP><FONT FACE="Times, serif"><I><SPAN LANG="en-US">dans</SPAN></I></FONT><SUP><FONT FACE="Courier New, monospace"><SPAN LANG="en-US">┐</SPAN></FONT></SUP><FONT FACE="Times, serif"><I><SPAN LANG="en-US"> 
 
sur l'os externe du coude il ne peut rien lever en</SPAN></I></FONT></P> 
 
<P LANG="de-DE" CLASS="western" STYLE="margin-bottom: 0cm"><FONT FACE="Times, serif"><I><SPAN LANG="en-US"> \t </SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">9 \t \t \t </SPAN></FONT><FONT FACE="Times, serif"><I><SPAN LANG="en-US">ayant 
 
la main tournée en dedans -</SPAN></I></FONT></P> 
 
<P LANG="de-DE" CLASS="western" STYLE="margin-bottom: 0cm"><FONT FACE="Times, serif"><I><SPAN LANG="en-US"> \t </SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">10 \t \t \t </SPAN></FONT><FONT FACE="Times, serif"><I><SPAN LANG="en-US">dort, 
 
mange bien</SPAN></I></FONT></P> 
 
<P LANG="de-DE" CLASS="western" STYLE="margin-bottom: 0cm"><FONT FACE="Times, serif"><I><SPAN LANG="en-US"> \t </SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">11 \t \t \t avant 
 
6 semaines de l'onguent de tart.em. derrière l[']oreille </SPAN></FONT> 
 
</P> 
 
<P LANG="de-DE" CLASS="western" STYLE="margin-bottom: 0cm"><FONT FACE="Times, serif"><SPAN LANG="en-US"> \t 12 \t \t \t qui 
 
lui poussait de boutons très dou-</SPAN></FONT></P> 
 
<P LANG="de-DE" CLASS="western" STYLE="margin-bottom: 0cm"><FONT FACE="Times, serif"><SPAN LANG="en-US"> \t 13 \t \t \t loureux 
 
et causait un fièvre°</SPAN></FONT></P> 
 
<P LANG="de-DE" CLASS="western" STYLE="margin-bottom: 0cm"><FONT FACE="Times, serif"><SPAN LANG="en-US"> \t 14 \t \t \t n'entend 
 
point du tout ma montre d'or à droit[e]</SPAN></FONT></P> 
 
<P LANG="de-DE" CLASS="western" STYLE="margin-bottom: 0cm"><FONT FACE="Times, serif"><SPAN LANG="en-US"> \t 15 \t \t \t mais 
 
à la gauche en 8 pouce de distance </SPAN></FONT> 
 
</P> 
 
<P LANG="de-DE" CLASS="western" STYLE="margin-bottom: 0cm"><FONT FACE="Times, serif"><SPAN LANG="en-US"> \t 9 \t * \t \t Tinctura 
 
Sulph. </SPAN></FONT><FONT FACE="Times, serif">1 globule C 30 en 14 
 
C. 1 Spiritus vini</FONT></P>

The want-to file should look like this. Но имейте в виду, что теперь у меня есть теги со всей жирной и курсивной информацией. Речь идет только о разрывах строк и о том, где они.

Каждая строка должна начинаться с \ t \ d и заканчиваться разрывом строки. Но из-за этого дерьмового экспорта это выглядит как this.

Как объединить все строки, которые не начинаются с \ t \ d с первой, которая начинается с \ t \ d?

Я хотел использовать re.sub, но я думаю, что перепутал с регулярным выражением. Я попробовал что-то вроде этого. К сожалению, мое умение python не так хорошо, а Digital Humanist.

regex1 = r"(^\t\d.*?)\n(.*?)\n" 
final = re.sub(regex1, "\2\1\n", f) 

Не существует ли более быстрый способ удалить все ненужные \ n?

Большое спасибо за помощь. Любой код оценивается.

+0

Я забыл упомянуть, что исходный текст имеет около 1000 страниц в .doc. И у нас больше файлов. Вот почему мы должны решать это автоматически. – fabsurd

ответ

0

Замена "\n" с "", когда не следует \t\d легко с регулярных выражений опережающего просмотра.

final = re.sub(r'\n(?!\t\d)', '', f) 

Отрицательная опережения (?!subregex) заставляет движок регулярных выражений, чтобы пропустить матч, если текст сразу после мнимого матча соответствует subregex в упреждающей выборке.

+0

Большое спасибо. что может решить мою проблему. я собираюсь попробовать! – fabsurd

0

Если предположить, что у вас есть все ваши HTML в переменной с именем, скажем, mess, вы могли бы просто сделать

mess.replace("\n","") 
+0

, то я заменил бы все \ n. Но я нуждаюсь в них. Это как раз о \ n, который не подходит до \ t \ d – fabsurd

+0

@fabsurd. Я понимаю. Пока я не могу рассмотреть конкретную проблему, [BeautifulSoup] (https://www.crummy.com/software/BeautifulSoup/bs4/doc/) должен быть в состоянии помочь вам. Через несколько часов я снова заберусь и доберусь до него, если к тому времени он не будет разрешен. – Anomitra

+0

, который выглядит потрясающе. я должен проверить это! – fabsurd

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

  • Нет связанных вопросов^_^