私はいくつかの問題にHTML文書を解析しています。私はxml2を使用していますが、これまでのところ私はかなり幸せです。しかし、私が解決したい問題は依然として残っています。これは基本的に私の文書をパースする方法です:Rで正しくHTMLを解析するにはどうすればよいですか?
html.raw <- xml2::read_html('/Users/simgeh/Documents/pipeDirs/BMAS/html_withid/2014_02_17_nahles_in_paris.html')
docContent <- xml_text(xml_find_all(html.raw, xpath="//div[@id='content']//text()
[not(ancestor-or-self::div[@class='docType'])]
[not(ancestor-or-self::h1[@class='isFirstInSlot'])]
[not(ancestor-or-self::div[@class='abstract'])]
[not(ancestor-or-self::div[@class='sectionRelated'])]
[not(ancestor-or-self::div[@id='contentsocial'])]"))
ほとんどの場合、内容を取得すると(たいてい長いテキスト)OKです。しかし場合によっては、たとえば記事にリンクがいくつかある場合、それは混乱のように見えるかもしれません。解析されたテキストは、次のようになります。
アムDonnerstag(12.01。)wirdBundesaußenminister博士はフランク・ヴァルター・シュタインマイヤー イムAuswärtigenAMTのMIT青年Amtskollegen AUS GroßbritannienウントAUS Frankreich、ジャック・ストローウントフィリップ Douste-Blazy 、GemeinsameのためのEUのためのHohenの代表者 Außen-und Sicherheitspolitik、Javier Solana、Zusammenkommen。 Themore トレフェンズ・アース・イニシアティブ・ヌクル・プログラム・セイン。
しかし
は次のようになります。アムDonnerstag(12.01。)wirdBundesaußenminister博士はフランク・ヴァルター・ シュタインマイヤーイムAuswärtigenAMTのMIT青年Amtskollegen AUS GroßbritannienウントAUS Frankreich、
ジャックストロー
および
フィリップドウSTE-Blazy
、sowie DEMホヘンRepräsentanten・デア・EUのfürGemeinsameAußen-を死ぬウント Sicherheitspolitik、
ハビエル・ソラナ
、zusammenkommen。 Thema des Treffens wird das iranische Nuklearprogramm sein。
問題は、テキストの中にいくつかの言葉が別の言語で書かれていて、それを示すことが好きだったことです。たとえば、次のように名前「ジャック・ストロー」が参照されている:
<span lang=\"en-GB\" xml:lang=\"en-GB\" xml:lang=\"en-GB\">Jack Straw</span>
毎回これはテキストが台無しにされますが起こります。だから私は、解析されたテキストの品質を改善するいくつかの方法を探しています。
おそらく解決策が見つかりましたが、期待通りに機能しません。私のxpath文字列から//text()
を削除した場合、解析されたテキストは意図した通りに見えるようになりますが、コンテナから不要なコンテンツを削除する方法はありません。短い[not(ancestor-or-self
では、データがうまくいかず、わからないテキストが残ってしまいます。私の問題の
「短い」イラスト:
<html>
# a lot of html before my node I want to grab...
<div class="Pressemitteilungen">
<div class="doctype">unwanted</div>
<h1 class="something">unwanted</h1>
<p>wanted data</p>
<p>wanted data
<span lang=\"en-GB\" xml:lang=\"en-GB\" xml:lang=\"en-GB\">wanted data</span>
</p>
<p>wanted data</p>
<blockquote>
<p>wanted data</p>
</blockquote>
<p class="msSomething">wanted data</p>
<p class="msSomethingElse">wanted data</p>
<ul>
<li> wanted data</li>
</ul>
</div>
# a lot of stuff after my node I want to grab...
</html>
私は必要としないいくつかのデータが含まれている完全なノードを、つかむ理由は、どのように伝えるのない現実的な方法がないことです私は期待できるので、つかむ必要があります。場合によっては、データは<p>
、<p class="msSomething">
または<p class="msSomethingElse">
などでラップされます。だから私はノードから不要なものを削除するのではなく、個別に正しいタグを探すために容易になるだろうと思いました。我々はまた、多くのデータを話す。 (30.000+)
例えば、このプレスリリースを取る: http://www.bmas.de/DE/Presse/Pressemitteilungen/2014/2014_02_13_arbeitnehmerfreizuegigkeit.html
をあなたのアイデアを使用して、私はこのように私のデータをつかむ:限り、私はまだテキストが同じよう台無しになっ//text()
を使用するよう
docContent <- xml_text(xml_find_all(html.raw, xpath="(//div[@class='article-text singleview']//p[@class='MsoNormal']|
//div[@class='article-text singleview']//h2|
//div[@class='article-text singleview']//blockquote)//text()"))
この:
[18] "\ nMinisterハサンAdemov:"
[19]「ダイbulgarische Regierung帽子のSiCHイメル"21" "EU"
[21] " - Rechtsvorschriften zurArbeitnehmerfreizügigkeitausgesprochen。オーシュWIRschätzenダイVorteile Freizügigkeitウントihre正AuswirkungのAUFダイWirtschaft innerhalb DERをDER "
- デEuropäischenParlamentsウントデア"
[22] "EU"
[23]" -Kommissionüberein Unsere位置stimmt MITデア [24] "EU"
[25]」。 Gleichzeitig anerkennen WIR、DASS MIT Rechtenオーシュイメル entsprechende Pflichten verbundenシンド。 「
この理由は、テキスト内のこの<abbr title="Europäische Union">EU</abbr>
ような注釈している私は、XPathから//text()
を削除すると、テキストが完全に構造化されているが、私はこのような不要なデータを削除することはできません:。([not(ancestor-or-self::div[@class='sectionRelated'])]
)
ので、 、任意の助けをいただければ幸いです...
はあなたが作るでした:不要な
h2
タグ「オーディオ」と「Weitere Informationenは」<div class="sectionRelated">
さらに内に囲まれているので、私は信じていることは、あなたの希望する結果(私はまだ試してみて、あなたが実際に欲しいものを推測する必要が)ありますあなたの例の再現ible?例えば。 *アン*所望の出力だけでなく、ご希望の出力の例を生成する行の最小数を含む「HERE MINIMAL例」XML2 :: read_html( ' - あなたは' html.raw <のような行を追加することができます。 –私はHTMLの基本構造を追加しました。 – SimGeh