2

現在、perl HTML::Strip を使用して HTML ファイルからテキストを抽出していますが、HTML 固有のスペース、つまり " " で小さな問題が発生しました。何らかの理由で、HTML::Strip->parse() はこのインスタンスでは機能しないようです。後で置換コマンドを実行できることはわかっています。しかし、 new() コンストラクターを調整することでこれを達成できる別の方法があるかどうかを確認していましたか? 前もって感謝します

パールコード:

my $hs = HTML::Strip->new();
my $line = join('',@htmlSource);
my $clean_text = $hs->parse( $line );
push @processedLines,  grep { /\S/ } split (/\n/,$clean_text);
foreach my $f  ( @processedLines ) {
  print "$f\n";
}

サンプル出力:

CBD_UnitTest
MtrTempEst
MtrTempEst_Init1 (C1-Coverage: 100.00 %, 1 out of 1 Testcases passed)
LeadLagFilt (C1-Coverage: 100.00 %, 1 out of 1 Testcases failed)
                                        
                                        
AssMechFiltInit (C1-Coverage: 100.00 %, 1 out of 1 Testcases passed)

サンプル データセット:

<table bgcolor="white" width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
        <td align="center">
            <table width="100%" cellspacing="0" cellpadding="1" bgcolor="white" border="0">
                    <tr bgcolor="#dcdcdc">
                    <td width="1%" bgcolor="white">
                        <img border="0" src="pictures/batch_module_notok.jpg"/>
                    </td>
                    <td colspan="3" width="1%">
                        <font face="tahoma" size="-2" color="black">
                                    CBD_UnitTest
                        </font>
                    </td>
                    <td width="1%">
                    </td>
                    <td width="1%">
                    </td>
                    <td width="1%">
                        <img border="0" src="pictures/batch_check_notok.gif"/>
                    </td>
                </tr>
                    <tr bgcolor="white">
                    <td width="1%" bgcolor="white">
                    </td>
                    <td width="1%" bgcolor="white">
                        <img border="0" src="pictures/batch_module_notok.jpg"/>
                    </td>
                    <td colspan="2">
                        <font face="tahoma" size="-2" color="black">
                                    MtrTempEst
                        </font>
                    </td>
                    <td width="1%">
                    </td>
                    <td width="1%">
                    </td>
                    <td width="1%">
                        <img border="0" src="pictures/batch_check_notok.gif"/>
                    </td>
                </tr>
                    <tr bgcolor="#dcdcdc">
                    <td width="1%" bgcolor="white">
                    </td>
                    <td width="1%" bgcolor="white">
                    </td>
                    <td width="1%" bgcolor="white">
                        <img border="0" src="pictures/batch_ok.jpg"/>
                    </td>
                    <td>
                            <a href="#CBD_UnitTest:MtrTempEst:ts_MtrTempEst_Init1"><font face="tahoma" size="-2" color="black">
                                MtrTempEst_Init1 (C1-Coverage: 100.00 %, 1 out of 1 Testcases passed)
                            </font></a>
                    </td>
                    <td width="1%">
                    </td>
                    <td width="1%">
                    </td>
                    <td width="1%">
                        <img border="0" src="pictures/batch_check_ok.gif"/>
                    </td>
                </tr>
                    <tr bgcolor="#FF0000">
                    <td width="1%" bgcolor="white">
                    </td>
                    <td width="1%" bgcolor="white">
                    </td>
                    <td width="1%" bgcolor="white">
                        <img border="0" src="pictures/batch_notok.jpg"/>
                    </td>
                    <td>
                            <a href="#CBD_UnitTest:MtrTempEst:ts_LeadLagFilt"><font face="tahoma" size="-2" color="white">
                                <b>LeadLagFilt (C1-Coverage: 100.00 %, 1 out of 1 Testcases failed)</b>
                            </font></a>
                    </td>
                    <td width="1%">
            <a name="LeadLagFilt_0"></a>
            &nbsp;                      </td>
                    <td width="1%">
            &nbsp;                      </td>
                    <td width="1%">
                        <img border="0" src="pictures/batch_check_notok.gif"/>
                    </td>
                </tr>
                    <tr bgcolor="#dcdcdc">
                    <td width="1%" bgcolor="white">
                    </td>
                    <td width="1%" bgcolor="white">
                    </td>
                    <td width="1%" bgcolor="white">
                        <img border="0" src="pictures/batch_ok.jpg"/>
                    </td>
                    <td>
                            <a href="#CBD_UnitTest:MtrTempEst:ts_AssMechFiltInit"><font face="tahoma" size="-2" color="black">
                                AssMechFiltInit (C1-Coverage: 100.00 %, 1 out of 1 Testcases passed)
                            </font></a>
                    </td>
                    <td width="1%">
                    </td>
                    <td width="1%">
                    </td>
                    <td width="1%">
                        <img border="0" src="pictures/batch_check_ok.gif"/>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
</table>
4

2 に答える 2

1

HTML::エンティティをインストールしましたか? HTML::Strip状態 のドキュメント:

「HTML::Strip は、HTML::Entities がインストールされている場合にのみ、HTML エンティティのデコードを試みます。」

于 2013-11-09T23:21:24.440 に答える
1

上記の HTML::Entities へのリンクから答えを見つけました。Thx @edibleEnergy

use HTML::Strip;
use HTML::Entities;

my $hs = HTML::Strip->new();
my $line = join('',@htmlSource);
_decode_entities($line, { nbsp => "" }, 1);
my $clean_text = $hs->parse( $line );
push @processedLines,  grep { /\S/ } split (/\n/,$clean_text);
foreach my $f  ( @processedLines ) {
  print "$f\n";
}

ここで単純な置換 (つまり s/\ //g) を使用できることは理解していますが、上記の例は、";" の有無にかかわらず機能します。最後に。@edibleEnergy の回答にあるリンクを確認してください。

于 2013-11-11T17:24:56.530 に答える