This question already has answers here:
remove text between delimiters, multiple times on each line
(2 answers)
Closed 3 years ago.
I want to get rid of everything between patterns "< >" including patterns using bash.
I have tried those sed commands, but it's not giving the result i want.
sed 's/<.*>//g'
sed -r 's/<[^ ][^ ]*>//g'
For instance
From:
<span class="tlf_cdefinition">Qui ordonne, dispose, met en ordre.</span> <span class="tlf_cexemple"><i>Le geste humain (...) renonce à prendre; il met la chose en place et la considère; tout est spectacle pour l'homme, et même son action. Non point doux par cela seul; redoutable au contraire par cette activité ordinnatrice </i>[<i>sic</i>] (<span class="tlf_cauteur"><span class="tlf_smallcaps">Alain</span></span><span class="tlf_ctitre">, <i>Propos</i></span><span class="tlf_cdate">, 1921</span>, p.271).</span><div class="tlf_parothers"><b>Rem.</b> On emploie de préférence auj., dans ce sens, <i>ordonnateur, -trice</i>.</div></div><div class="tlf_parah"><span class="tlf_cplan"><b>II. −</b></span> <span class="tlf_cemploi"><i>Subst. masc.</i></span> <div class="tlf_parah"><span class="tlf_cplan"><b>A. −</b></span> <span class="tlf_cdomaine"><i>LITURG.</i>,</span> <span class="tlf_cemploi"><i>vx.</i></span> <span class="tlf_cdefinition">Celui qui confère le sacrement d'un ordre ecclésiastique. (<span class="tlf_csource">Dict. <span class="tlf_smallcaps">xix</span><sup>e</sup>et <span class="tlf_smallcaps">xx</span><sup>e</sup>s.</span>).</span> </div><div class="tlf_parah"><span class="tlf_cplan"><b>B. −</b></span> <span class="tlf_cdomaine"><i>INFORMAT.</i></span> <span class="tlf_cdefinition">Machine algorithmique composée d'un assemblage de matériels correspondant à des fonctions spécifiques, capable de recevoir de l'information, dotée de mémoires à grande capacité et de moyens de traitement à grande vitesse, pouvant restituer tout ou partie des éléments traités, ayant la possibilité de résoudre des problèmes mathématiques et logiques complexes, et nécessitant pour son fonctionnement la mise en oeuvre et l'exploitation automatique d'un ensemble de programmes enregistrés.</span> <span class="tlf_csyntagme"><i>Éléments périphériques d'un ordinateur; adresse, console, pupitre d'un ordinateur; imprimante, mémoire d'un ordinateur;</i></span> <span class="tlf_csyntagme">
I want to keep only that:
Qui ordonne, dispose, met en ordre.Le geste humain (...) renonce à
prendre; il met la chose en place et la considère; tout est spectacle
pour l'homme, et même son action. Non point doux par cela seul;
redoutable au contraire par cette activité ordinnatrice [] (Alain,
Propos, 1921, p.271).Rem. On emploie de préférence auj., dans ce sens,
ordonnateur, -trice.II. −Celui qui confère le sacrement d'un ordre
ecclésiastique. (Dict. xixeet xxes.).B. −INFORMAT.Machine
algorithmique composée d'un assemblage de matériels correspondant à
des fonctions spécifiques, capable de recevoir de l'information, dotée
de mémoires à grande capacité et de moyens de traitement à grande
vitesse, pouvant restituer tout ou partie des éléments traités, ayant
la possibilité de résoudre des problèmes mathématiques et logiques
complexes, et nécessitant pour son fonctionnement la mise en oeuvre et
l'exploitation automatique d'un ensemble de programmes
enregistrés.Éléments périphériques d'un ordinateur; adresse, console,
pupitre d'un ordinateur; imprimante, mémoire d'un ordinateur;
As the comment by #Tom above alludes, using regex to parse HTML is generally evil. That being said, if you only have single level (non nested) HTML tags, then regex might work here. But, Sed's regex engine is not very powerful, as it does not support lazy dot. Here is a way to do this using Perl in the Bash:
echo "<span class=\"tlf_cdefinition\">Qui ordonne, dispose, met en ordre.</span> <h1>Hello World!</h1>"
| perl -pe 's|<[^>]+>(.*?)</[^>]+>|\1|g'
This outputs:
Qui ordonne, dispose, met en ordre. Hello World!
Related
i'm progrossing in XSLT (slowly) and i have a task to do with strings ans regexp. Here is a sample of my xml file :
<items>
<item type="forme" pos="434"><f>le</f><c>D</c><l>le</l><a>B</a><a>-</a><a>-</a><a>-</a><a>sg</a><a>masc</a><a>DEP(436)</a><a>DEP(436)</a><a>-</a><a>-</a><a>-</a><a>-</a><a>O</a><a>I</a><a>I</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>0</a><a>0</a><a>H</a><a>91.10469213033109</a><a>88.35438807575431</a><a>U</a><a>U_ml</a><a>ml</a><a>384.0760000000003</a><a>253.98099999999957</a><a>$L1</a><a>-</a><a>I</a><a>-</a><a>mlh2</a><a>I</a><a>-</a><a>-</a><a>included</a><a>hHL2</a><a>I</a><a>-</a><a>-</a><a>strong</a><a>mHL2</a><a>I</a><a>-</a><a>-</a><a>strong</a><a>mHL2</a><a>60.786288</a><a>61.170364</a><a>(IU:I)_(PER:I)_(PAQ:I)_(GR:I)</a><a>(ASNUC:O)_(PER:I)</a><a>(PRN:O)_(PER:I)</a><a>(PON:O)_(PAQ:I)_(PER:I)_(GR:I)</a></item>
<item type="delim" pos="435"><f> </f><c>BLANK</c><l>BLANK</l><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a></item>
<item type="forme" pos="436"><f>cours</f><c>N</c><l>cours</l><a>B</a><a>-</a><a>-</a><a>-</a><a>sg</a><a>masc</a><a>OBJ(432)</a><a>OBJ(432)</a><a>-</a><a>-</a><a>-</a><a>-</a><a>O</a><a>I</a><a>I</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>S</a><a>S</a><a>-</a><a>89.13140170852544</a><a>93.87310688497651</a><a>U</a><a>U_hh</a><a>hh</a><a>228.2860000000042</a><a>270.4284999999977</a><a>$L1</a><a>-</a><a>I</a><a>-</a><a>mlh2</a><a>L</a><a>-</a><a>-</a><a>included</a><a>hHL2</a><a>L</a><a>-</a><a>-</a><a>strong</a><a>mHL2</a><a>L</a><a>-</a><a>-</a><a>strong</a><a>mHL2</a><a>61.170364</a><a>61.39865</a><a>(IU:I)_(PER:I)_(PAQ:L)_(GR:L)</a><a>(ASNUC:O)_(PER:I)</a><a>(PRN:O)_(PER:I)</a><a>(PON:O)_(PAQ:L)_(PER:I)_(GR:L)</a></item>
<item type="delim" pos="437"><f> </f><c>BLANK</c><l>BLANK</l><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a></item>
<item type="forme" pos="438"><f>Jean</f><c>N</c><l>Jean</l><a>B</a><a>-</a><a>-</a><a>-</a><a>sg</a><a>masc</a><a>DEP(436)</a><a>DEP(436)</a><a>-</a><a>-</a><a>-</a><a>-</a><a>O</a><a>I</a><a>I</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>0</a><a>0</a><a>-</a><a>89.66516939765438</a><a>92.41608461220896</a><a>U</a><a>U_hl</a><a>hl</a><a>267.63799999999804</a><a>258.09050000000155</a><a>$L1</a><a>-</a><a>I</a><a>-</a><a>mlh2</a><a>B</a><a>B_hhl2</a><a>lone_hhl2</a><a>lone</a><a>hhl2</a><a>B</a><a>B_hhl2</a><a>B_strong_hhl2</a><a>strong</a><a>hhl2</a><a>B</a><a>B_strong</a><a>B_strong_hhl2</a><a>strong</a><a>hhl2</a><a>61.39865</a><a>61.666288</a><a>(IU:I)_(PER:I)_(PAQ:B)_(GR:B)</a><a>(ASNUC:O)_(PER:I)</a><a>(PRN:O)_(PER:I)</a><a>(PON:O)_(PAQ:B)_(PER:I)_(GR:B)</a></item>
<item type="delim" pos="439"><f> </f><c>BLANK</c><l>BLANK</l><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a></item>
<item type="forme" pos="440"><f>Jaurès</f><c>N</c><l>Jaurès</l><a>B</a><a>-</a><a>-</a><a>-</a><a>sg</a><a>masc</a><a>DEP(438)</a><a>DEP(438)</a><a>-</a><a>-</a><a>-</a><a>-</a><a>O</a><a>I</a><a>L</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>S</a><a>0</a><a>-</a><a>89.91638709330856</a><a>89.01649305547852</a><a>U</a><a>U_lh</a><a>lh</a><a>260.0000000000051</a><a>213.81899999999732</a><a>$L1</a><a>0.126722999999998</a><a>L</a><a>-</a><a>mlh2</a><a>L</a><a>-</a><a>-</a><a>lone</a><a>hhl2</a><a>L</a><a>-</a><a>-</a><a>strong</a><a>hhl2</a><a>L</a><a>-</a><a>-</a><a>strong</a><a>hhl2</a><a>61.666288</a><a>62.086288</a><a>(IU:I)_(PER:L)_(PAQ:L)_(GR:L)</a><a>(ASNUC:O)_(PER:L)</a><a>(PRN:O)_(PER:L)</a><a>(PON:O)_(PAQ:L)_(PER:L)_(GR:L)</a></item>
<item type="delim" pos="441"><f> </f><c>BLANK</c><l>BLANK</l><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a></item>
<item type="delim" pos="442"><f>#</f><c>DELIM</c><l>§</l><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a></item>
<item type="delim" pos="443"><f> </f><c>BLANK</c><l>BLANK</l><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a></item>
<item type="delim" pos="444"><f> </f><c>BLANK</c><l>BLANK</l><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a></item>
<item type="forme" pos="445"><f>si</f><c>CS</c><l>si</l><a>B</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>ROOT</a><a>ROOT</a><a>-</a><a>-</a><a>-</a><a>-</a><a>O</a><a>I</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>B</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>0</a><a>_</a><a>-</a><a>86.92136531453266</a><a>88.13351137193554</a><a>U</a><a>U_ml</a><a>ml</a><a>149.99999999999858</a><a>260.0000000000016</a><a>$L1</a><a>-</a><a>B</a><a>B_lh</a><a>lh</a><a>B</a><a>B_ml</a><a>lone_ml</a><a>lone</a><a>ml</a><a>B</a><a>B_ml</a><a>B_strong_ml</a><a>strong</a><a>ml</a><a>B</a><a>B_strong</a><a>B_strong_ml</a><a>strong</a><a>ml</a><a>62.213011</a><a>62.363011</a><a>(IU:I)_(PER:B)_(PAQ:B)_(GR:B)</a><a>(ASNUC:O)_(PER:B)</a><a>(PRN:O)_(PER:B)</a><a>(PON:B)_(PAQ:B)_(PER:B)_(GR:B)</a></item>
<item type="delim" pos="446"><f> </f><c>BLANK</c><l>BLANK</l><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a></item>
<item type="forme" pos="447"><f>je</f><c>Cl</c><l>je</l><a>B</a><a>-</a><a>-</a><a>1</a><a>sg</a><a>-</a><a>SUB(451)</a><a>SUB(451)</a><a>-</a><a>-</a><a>-</a><a>-</a><a>O</a><a>I</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>I</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>0</a><a>0</a><a>-</a><a>88.97374267270202</a><a>87.07924198196244</a><a>U</a><a>U_llm2</a><a>llm2</a><a>189.99999999999773</a><a>193.33333333333277</a><a>$L1</a><a>-</a><a>I</a><a>-</a><a>lh</a><a>I</a><a>-</a><a>-</a><a>lone</a><a>ml</a><a>I</a><a>-</a><a>-</a><a>strong</a><a>ml</a><a>I</a><a>-</a><a>-</a><a>strong</a><a>ml</a><a>62.363011</a><a>62.553011</a><a>(IU:I)_(PER:I)_(PAQ:I)_(GR:I)</a><a>(ASNUC:O)_(PER:I)</a><a>(PRN:O)_(PER:I)</a><a>(PON:I)_(PAQ:I)_(PER:I)_(GR:I)</a></item>
<item type="delim" pos="448"><f> </f><c>BLANK</c><l>BLANK</l><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a></item>
<item type="forme" pos="449"><f>me</f><c>Cl</c><l>me</l><a>B</a><a>-</a><a>-</a><a>1</a><a>sg</a><a>-</a><a>DEP(451)</a><a>DEP(451)</a><a>-</a><a>-</a><a>-</a><a>-</a><a>O</a><a>I</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>I</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>O</a><a>S</a><a>S</a><a>-</a><a>89.08184154908382</a><a>86.76348864710289</a><a>U</a><a>U_ll</a><a>ll</a><a>330.0000000000054</a><a>192.499999999999</a><a>$L1</a><a>-</a><a>I</a><a>-</a><a>lh</a><a>L</a><a>-</a><a>-</a><a>lone</a><a>ml</a><a>L</a><a>-</a><a>-</a><a>strong</a><a>ml</a><a>L</a><a>-</a><a>-</a><a>strong</a><a>ml</a><a>62.553011</a><a>62.883011</a><a>(IU:I)_(PER:I)_(PAQ:L)_(GR:L)</a><a>(ASNUC:O)_(PER:I)</a><a>(PRN:O)_(PER:I)</a><a>(PON:I)_(PAQ:L)_(PER:I)_(GR:L)</a></item>
<item type="delim" pos="450"><f> </f><c>BLANK</c><l>BLANK</l><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a><a>-</a></item>
...
</items>
In fact I just have to concatenate all f nodes (words) to create sentences from item nodes When the f node = RETURN, i have to add carriage return. I can manage it. I did it. Here is my output.
Euh bon pour aller du CRDT à la gare euh de Grenoble je euh ben je sors déjà du CRDT.
Je remonte euh l'avenue Général Champon.
Je traverse euh face à la euh MDE.
Et je euh je continue je continue jusqu'à une place qui est face à la grande poste. où il y a la euh Chambre de Commerce et d'Industrie.
Et euh je reprends je crois le & non c'est pas le boulevard Gambetta. je ne sais pas lequel c'est euh. c'est l'autre.
Et euh donc je vais jusqu'au & jusqu'à la place Victor Hugo.
Et là je me retrouve euh en effet euh s~ près des rails du tram.
Et euh et ces rails du tram eh ben je vais je vais les longer.
Je vais traverser euh le boulevard Gambetta.
Ça cette fois c'est le boulevard Gambetta.
Ensuite euh je vais euh prendre je crois que c'est l'avenue Alsace-Lorraine. que je vais remonter remonter.
Je vais traverser le cours Jean Jaurès. si je me souviens bien.
Et je vais euh je vais toujours continuer cette avenue Alsace-Lorraine.
Et euh et ben voilà j'arrive au niveau de la grande place de la gare où il y a tous les trams tous les bus. non pas tous les bus.
Ils sont pas de ce côté-là.
Et voilà.
Et je suis arrivée sur la gare.
Alors là tu vois donc tu continues tout droit tout droit.
Tu traverses tout.
Tu arrives à un rond-point.
Au rond-point c'est tout droit direction Saint-Jean-de-Maurienne.
Euh donc tou~ tou~ toujours Saint-Jean-de-Maurienne.
Tu passes un autre rond-point.
Donc toujours tout droit.
Après tu montes une grande grande ligne droite.
Tu passes devant la piscine.
Euh il y a un stade aussi à côté.
Et tu arrives à un rond-point. donc là tu rentres dans le centre-ville.
There are some words cutted in 2 by . It's the frontiere between two sentences. Is it possible to put the first letter of my second word in uppercase ? with regex and capture group or other ? I'm ttying to create a template but i don'tknow if it's recursive or not
Exemple :
Jaurès. si = Jaurès. Si
Is it possible with my code or in XLST ? or do i have to change my way ? I know in Perl it's possible but i don't know about XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8"/>
<xsl:template match="/">
<xsl:for-each-group select="//item" group-ending-with="item[contains(f/text(),'RETURN')]">
<xsl:variable name="phrase">
<xsl:for-each select="current-group()//f">
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:variable>
<xsl:variable name="phrase_norm" select="replace(replace(translate(string-join($phrase), '#£§§', ''), '(\W+)\s\s+RETURN', '. '), '\s\s+', '. ')"/>
<xsl:value-of select="concat(upper-case(substring($phrase_norm,1,1)), substring($phrase_norm, 2), ' '[not(last())])"/>
<xsl:text>
</xsl:text>
</xsl:for-each-group>
</xsl:template>
<xsl:template name="upper">
<xsl:param name="text"></xsl:param>
<xsl:analyze-string select="$text" regex="\W+\.\s(\W+)">
<xsl:matching-substring>
<xsl:for-each select="regex-group(1)">
<xsl:value-of select="replace($text, regex-group(1), (concat(upper-case(substring(regex-group(1),1,1)), substring(regex-group(1), 2)), ' '[not(last())]))"/>
</xsl:for-each>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:template>
</xsl:stylesheet>
EDIT : the frist replace '(\W+)\s\s+RETURN', '. ' give my 2 spaces between, not the '. '.
I ran into an interesting problem when attempting to tokenise a french text using nltk (version 3.1, python 2.7). Here is the code snippet I am using.
#python 2.7
from __future__ import division
import nltk, re, pprint
f= open('test.txt')
raw = f.read()
print "got it!"
print type(raw)
ucoderaw=raw.decode('utf-8')
print ucoderaw
tokens = nltk.word_tokenize(ucoderaw)
print type(tokens)
words = [w.lower() for w in tokens]
print type(words)
vocab = sorted(set(words))
print "Tokens"
The document contains a french text:
J'ai lieu de croire que Mr. de Voltaire ne sera pas fâché de voir que
son Manuscrit, qu'il a intitulé Abrégé de l'Histoire Universelle
depuis Charlemagne jusqu'à Charles-Quint, et qu'il dit être entre les
mains de trente Particuliers, soit tombé entre les miennes. Il sait
qu'il m'en avait flatté dès l'année 1742, à l'occasion de son Siècle
de Louis XIV, auquel je ne renonçai en 1750, que parce qu'il me dit
alors à Postdam, où j'étais, qu'il l'imprimait lui-même à ses propres
dépens. Ainsi il ne s'agit ici que de dire comment cet Abrégé m'est
tombé entre les mains, le voici.
À mon retour de Paris, en Juin de cette année 1753, je m'arrêtai à
Bruxelles, où j'eus l'honneur de voir une Personne de mérite, qui en
étant le possesseur me le fit voir, et m'en fit aussi tout l'éloge
imaginable, de même que l'histoire du Manuscrit, et de tout ce qui
s'était passé à l'occasion d'un Avertissement qui se trouve inséré
dans le
second Volume du mois de Juin 1752 du Mercure de France, et répété dans l'Épilogueur du 31 Juillet de la même année, avec la Réponse
que l'on y a faite, et qui se trouve dans le même Épilogueur du 7
Août suivant: toutes choses inutiles à relever ici, mais qui m'ont
ensuite déterminé à acheter des mains de ce Galant-Homme le Manuscrit
après avoir été offert à l'Auteur, bien persuadé d'ailleurs qu'il
était effectivement de Mr. de Voltaire; son génie, son style, et
surtout son orthographe s'y trouvant partout. J'ai changé cette
dernière, parce qu'il est notoire que le Public a toutes les peines du
monde à s'y accoutumer; et c'est ce que l'Auteur est prié de vouloir
bien excuser.[1]
Je dois encore faire remarquer que par la dernière période de ce
Livre, il paraît qu'elle fait la clôture de cet Abrégé, qui finit à
Charles VII Roi de France, au lieu que l'Auteur la promet par son Titre jusqu'à l'Empereur Charles-Quint. Ainsi il est à présumer que
ce qui devrait suivre, est cette partie différente d'Histoire qui
concerne les Arts, qu'il serait à souhaiter que Mr. de Voltaire
retrouvât, ou, pour mieux dire, qu'il voulût bien refaire, et la
pousser jusqu'au Siècle de Louis XIV, afin de remplir son plan, et
de nous donner ainsi une suite d'Histoire qui ferait grand plaisir au
Public et aux Libraires.
When I attempt to tokenise that text using tokens = nltk.word_tokenize(ucoderaw)
and then subsequently print out the tokens using sorted(set(words))
I get output with broken utf-8 encoding:
u'autant', u'author', u'autres', u'aux', u'available', u'avait',
u'avant', u'avec', u'avertissement', u'avoir', u'avons', u'away',
u'ayant', u'barbare', u'beaucoup', u'biblioth\xe8que', u'bien',
u'bnf/gallica', u'bornais', u'bruxelles', u'but', u'by', u"c'est",
u'capet', u'carri\xe8re', u'ce', u'cela', u'ces', u'cet', u'cette',
u'ceux', u'chang\xe9', u'chaos', u'character', u'charger',
u'charlemagne', u'charlequint', u'charles-quint_', u'chartes',
u'chez', u'chine', u'choses', u'chronologie', u'chronologiques',
u'chr\xe9tienne', u'cl\xf4ture'
where the correct output should include accents i.e. bibliothèque and not biblioth\xe8que
I've been trying to figure out how to fix this, short of saving the output to a file and writing another program to replace \xe8 with è and so on and so forth.
Is there a simpler method?
EDIT: Not the cleanest solution, however I found that by tokenising and then saving that output to a file with the correct encoding I do (largely get the output required):
#python 2.7
#-*- coding: utf-8 -*-
from __future__ import division
import nltk, re, pprint
f= open('test.txt')
raw = f.read()
print "got it!"
#print raw
print type(raw)
#encode as utf8 before moving on.
ucoderaw=raw.decode('utf-8')
tokens = nltk.word_tokenize(ucoderaw)
print type(tokens)
words = [w.lower() for w in tokens]
print type(words)
vocab = sorted(set(words))
print "encoded raw input is"
print ucoderaw
# GET TOKENS
print vocab
#write to file with correct encoding to "fix" the problem
output_file = open('output.txt', 'w')
print len(vocab)
for words in vocab:
output_file.write(words.encode('utf-8') + "\n")
Firstly, see http://nedbatchelder.com/text/unipain.html
Then try to use Python3 instead of Python2 for text processing, it makes your life a lot easier =)
Finally, regardless of Py3 or Py2, using io.open instead of open is a good practice so that your code works across both Py3 and Py2:
import io
from collections import Counter
import nltk
# Try to open files within a context, see
# https://www.python.org/dev/peps/pep-0343/ and
# http://effbot.org/zone/python-with-statement.htm
with io.open('test.txt', 'r', encoding='utf8') as fin:
word_counts = Counter(word_tokenize(fin.read()))
# List of top most common words.
print word_counts.most_common()
# Sorted by counts
print word_counts.most_common(len(word_counts))
# Sorted alphabetically
print sorted(word_counts.keys())
I have three files. One is the original file, another contains a part of the lines of the original and another file with the modified parts have to replace the original.
And do not even know where to start. Can you help me?
Match file:
a demandé de montrer
grandes vacances
de faire
a montré
a remis
bien posé
n '
quand il l '
arrière du véhicule
modèle essence
Replace file:
a_demandé_de_montrer
grandes_vacances
de_faire
a_montré
a_remis
bien_posé
n_'
quand_il_l_'
arrière_du_véhicule
modèle_essence
Original file:
A 120km/h, la consommation tourne autour de 7.5l/100km si le vent est dans le dos...
A ce jour, je suis totalement satisfaite
A ce moment-là aux grandes vacances on m'a demandé de montrer le bon.
A chacun son choix
A chaque fois c'est moi qui dois les recontacter.
A eux de faire leurs avis....
A l'achat, le vendeur m'a montré comment rabattre le siège arrière, mais quand il l'a remis en place, ce n'était pas bien posé.
A l'arrière du véhicule, il était inscrit qu'il s'agissait d'une diesel, alors que c'est un modèle essence.
A la décharge du garage nous avons constaté un changement de personnel (nouveau directeur nouveau préposé a l accueil) laissons leur un temps d adaptation ...
A la limite, chacun son garagiste.
Desired output:
A 120km/h, la consommation tourne autour de 7.5l/100km si le vent est dans le dos...
A ce jour, je suis totalement satisfaite
A ce moment-là aux grandes vacances on m'a_demandé_de_montrer le bon.
A chacun son choix
J'avais droit aux grandes_vacances à l'entretien kit vacances.
A chaque fois c'est moi qui dois les recontacter.
A eux de_faire leurs avis....
A l'achat, le vendeur m'a_montré comment rabattre le siège arrière, mais quand il l'a_remis en place, ce n'était pas **bien_posé**.
A l'arrière_du_véhicule, il était inscrit qu'il s'agissait d'une diesel, alors que c'est un modèle_essence.
A la décharge du garage nous avons constaté un changement de personnel (nouveau directeur nouveau préposé a l accueil) laissons leur un temps d adaptation ...
A la limite, chacun son garagiste.
There may be a better way to do this, but if you would like to use AWK, you can asssign a variable for each file you read, build some arrays with the find and replace string, and then loop through each find/replace value:
awk '
file == 1 { source[++s] = $0 }
file == 2 { replace[++r] = $0 }
file == 3 {
for (i = 1; i < s; i++)
{ gsub (source[i], replace[i], $0) }
print
}
' file=1 match_file \
file=2 replace_file \
file=3 original_file
I don't claim this is the most efficient way to do it, but I think it will do what you describe.
You didn't show any effort on the implementation but this should solve your problem.
awk -F"\t" 'NR==FNR{a[$1]=$2;next}
{for(k in a) gsub(k,a[k])}1' <(paste search replace) text
create a lookup table, do the replacement based on lookup.
Here is one approach of solving this using awk:
#!/usr/bin/awk -f
FILENAME == ARGV[1] { m[FNR]=$0 } # Store the match word in an array
FILENAME == ARGV[2] { r[FNR]=$0 } # Store the replacement word in a second array
FILENAME == ARGV[3] { for (i in m) gsub(m[i],r[i]); print } # Do the replacement for every line in file3
Run it like this:
./script.awk match_file replace_file original_file
This is the output the first three codes.This is the output the first two codes. Perhaps the encoding?
a_demand▒_de_montreraa_demand▒_de_montreria_demand▒_de_montrersa_demand▒_de_montrersa_demand▒_de_montreroa_demand▒_de_montrerna_demand▒_de_montrersa_demand▒_de_montrer a_demand▒_de_montrerla_demand▒_de_montrerea_demand▒_de_montrerua_demand▒_de_montrerra_demand▒_de_montrer a_demand▒_de_montrerua_demand▒_de_montrerna_demand▒_de_montrer a_demand▒_de_montrerta_demand▒_de_montrerea_demand▒_de_montrerma_demand▒_de_montrerpa_demand▒_de_montrersa_demand▒_de_montrer a_demand▒_de_montrerda_demand▒_de_montrer a_demand▒_de_montreraa_demand▒_de_montrerda_demand▒_de_montreraa_demand▒_de_montrerpa_demand▒_de_montrerta_demand▒_de_montreraa_demand▒_de_montrerta_deman
d▒_de_montreria_demand▒_de_montreroa_demand▒_de_montrerna_demand▒_de_montrer a_demand▒_de_montrer.a_demand▒_de_montrer.a_demand▒_de_montrer.a_demand▒_de_montrer
a_demand▒_de_montrerAa_demand▒_de_montrer a_demand▒_de_montrerla_demand▒_de_montreraa_demand▒_de_montrer a_demand▒_de_montrerla_demand▒_de_montreria_demand▒_de_montrerma_demand▒_de_montreria_demand▒_de_montrerta_demand▒_de_montrerea_demand▒_de_montrer,a_demand▒_de_montrer a_demand▒_de_montrerca_demand▒_de_montrerha_demand▒_de_montreraa_demand▒_de_montrerca_demand▒_de_montrerua_demand▒_de_montrerna_demand▒
I tried this..
BEGIN {
while ((getline ln1 < mt) > 0)
{
source[++s] = ln1;
}
while ((getline ln2 < rp) > 0)
{
replace[++r] = ln2;
}
}
{
for ( i = 1; i < s; i++)
gsub (source[i], replace[i], $0)
print;
}
With GNU awk for ARGIND (with other awks just add FNR==1{ARGIND++}):
$ cat tst.awk
ARGIND==1 { a[FNR] = $0; next }
ARGIND==2 { map[a[FNR]] = $0; next }
{
for (m in map) {
gsub(m,map[m])
}
print
}
$ awk -f tst.awk match.txt replace.txt original.txt
A 120km/h, la consommation tourne autour de 7.5l/100km si le vent est dans le dos...
A ce jour, je suis totalement satisfaite
A ce moment-là aux grandes_vacances on m'a_demandé_de_montrer le bon.
A chacun son choix
A chaque fois c'est moi qui dois les recontacter.
A eux de_faire leurs avis....
A l'achat, le vendeur m'a_montré comment rabattre le siège arrière, mais quand il l'a_remis en place, ce n'était pas bien_posé.
A l'arrière_du_véhicule, il était inscrit qu'il s'agissait d'une diesel, alors que c'est un modèle_essence.
A la décharge du garage nous avons constaté un changement de personnel (nouveau directeur nouveau préposé a l accueil) laissons leur un temps d adaptation ...
A la limite, chacun son garagiste.
Like all other solutions posted so far, the above will behave undesirably if you have regexp metachars in your match file or regexp capture group identifiers in your replace file. If that can happen use index() and substr() instead of gsub().
I have a file include different lines and the lines are starting by the some word and finish by (;). i.e.
les enfant de la télé;
les efants sont contants;
les enfants mangent bien, les enfants cherchent a se distraire;
I want to cut this sentences and arrange all as:
les enfant de la télé;
les efants sont contants;
les enfants mangent bien;
les enfants cherchent a se distraire;
I would like to use the substr function and other method of str but I'm lost.
I'm trying to adapt an article to include it in a LaTeX Document. For that I'm using sed to substitute characters. However I find myself with a problem with some symbols like quotation marks. So for example with this paragraph:
Los problemas de Europa no son los mismos en todos los países. "Alemania no está creciendo rápidamente, pero consiguió evitar la recaída en la recesión", dice Guillen. "En Irlanda, por ejemplo, la economía cayó un 20%. En Francia, la situación no es desesperada, pero el país tampoco es ninguna Alemania". Mientras, Italia y España han vuelto a caer en la recesión, y Reino Unido acaba de anunciar que está nuevamente en recesión.
The " symbol (double quote in a single character) should be changed to a `` if it's found at the beginning of a word but to a '' (they are 2 characters: \x27\x27) if it's at the end. So the resulting paragraph should be (the % sysmbol was also changed):
Los problemas de Europa no son los mismos en todos los países. ``Alemania no está creciendo rápidamente, pero consiguió evitar la recaída en la recesión'', dice Guillen. ``En Irlanda, por ejemplo, la economía cayó un 20\%. En Francia, la situación no es desesperada, pero el país tampoco es ninguna Alemania''. Mientras, Italia y España han vuelto a caer en la recesión, y Reino Unido acaba de anunciar que está nuevamente en recesión.
I imagine that a regexp combining a space symbol and word to match at beginning should work, and a similar one for the end, but I don't know how to do it.
You could check that the " is either at the beginning of a line or preceded by a whitespace:
sed -r 's/(^| )"/\1``/g' filename
If your version of sed doesn't support extended regular expressions, you could say:
sed 's/\(^\| \)"/\1``/g'` filename
For escaping % and possibly other characters like &, $, you could make use of a character class to escape all those in one go:
sed -r 's/([$%])/\\\1/g' filename
The two could be combined too:
sed -r 's/(^| )"/\1``/g; s/([$%])/\\\1/g' filename
EDIT: From your clarification, it seems that you need to say:
sed -r 's/(^| )"/\1``/g;s/"/'"''"'\1/g' filename
This awk should change the " to `` if its in a beginning of a word.
awk '{for (i=1;i<=NF;i++) if ($i~/^"/) sub(/"/,"``",$i)}1' file
Los problemas de Europa no son los mismos en todos los países. ``Alemania no está creciendo rápidamente, pero consiguió evitar la recaída en la recesión", dice Guillen. ``En Irlanda, por ejemplo, la economía cayó un 20%. En Francia, la situación no es desesperada, pero el país tampoco es ninguna Alemania". Mientras, Italia y España han vuelto a caer en la recesión, y Reino Unido acaba de anunciar que está nuevamente en recesión.
It test one by one by one word and see if its starting with ", if yes change it.
For posix
sed "s/^\"/``/;s/ \"/ ``/g;s/\"$/''/;s/\" /''/g" YourFile > TempFile
mv TempFile YourFile
for gnu sed version (not testing machine here to validate)
sed -r "s/\( |^\)\"/\1``/g;s/"\( |$)/''\1/g" YourFile