【发布时间】:2017-02-17 12:01:56
【问题描述】:
我在转换 word-exported-html 文件时遇到问题。我需要获取包含所有样式信息(粗体、斜体...)的 .doc 文件的文本。我的代码中的标签清理器运行良好,现在我有了一个只有标签的 result.txt。
现在的问题是,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 }
-->
</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"> </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"> </SPAN></FONT></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">1 </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> </I></SPAN></FONT></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">2 </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"> </SPAN></FONT></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">3 </SPAN></FONT><FONT FACE="Times, serif"><I><B><SPAN LANG="en-US"> 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> </I></SPAN></FONT></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">4 </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"> </SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">5 </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"> </SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">6 </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"> </SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">7 </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"> </SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">8 </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"> </SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">9 </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"> </SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">10 </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"> </SPAN></I></FONT><FONT FACE="Times, serif"><SPAN LANG="en-US">11 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"> 12 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"> 13 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"> 14 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"> 15 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"> 9 * 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技能不是那么好,我是一个数字人文主义者。
regex1 = r"(^\t\d.*?)\n(.*?)\n"
final = re.sub(regex1, "\2\1\n", f)
难道没有更快的方法来删除所有不需要的\n吗?
非常感谢您的帮助。任何代码表示赞赏。
【问题讨论】:
-
我忘了说.doc中的原文大约有1000页。我们还有更多文件要处理。这就是为什么我们应该自动解决它。