0

私は感情分類に取り組んでおり、ローカルの映画データベースからデータを解析していました。問題は、それらが 3 つの分類形式を持っていることです。星のあるもの(...で実現)1つの「ゴミ」で、星を付けたりゴミと呼んだりしないものは、ここへのメインリンクです:http://www.csfd.cz/film/7049-playgirls/?all=1ソースコードをチェックする必要があります - これは、ムービーの 3 種類のユーザー評価すべてを確認できる例です。

</li>
<li id="comment-8356897">
    <h5 class="author"><a href="/uzivatel/138463-campbell/">Campbell</a></h5>
    <img src="http://img.csfd.cz/assets/images/rating/stars/2.gif" class="rating" width="16" alt="**" />
    <div class="info">
        <a href="/uzivatel/138463-campbell/komentare/">všechny komentáře uživatele</a></div>
    <p class="post">Ale jo:-D Když jsem viděl že tenhle film je na prvním místě mezi největšíma sračkama na CSFD, a tak jsem se zhrozil a abych si utrpení ještě vylepšil, tak jsem si pustil oba dva díly naráz. No hell to celkem bylo ale ne nic extrémní. Viděl jsem větší shity. V tomhle filmu jsem měl děsnej problém fandit někomu fandit protože to moc nejde. Šílenost, Ale ne nejhorší.<span class="date desc">(11.3.2011)</span></p>
</li>
<li id="comment-872277">
    <h5 class="author"><a href="/uzivatel/48974-fleker/">fleker</a></h5>

    <div class="info">
        <a href="/uzivatel/48974-fleker/komentare/">všechny komentáře uživatele</a></div>
    <p class="post">tak na todle rači ani koukat nebudu; hodnocení to má slušný ale nechci riskovat aby mi vyschla mícha<span class="date desc">(29.7.2009)</span></p>
</li>
<li id="comment-327360">
    <h5 class="author"><a href="/uzivatel/41698-ozo/">Ozo</a></h5>
    <strong class="rating">odpad!</strong>
    <div class="info">
        <a href="/uzivatel/41698-ozo/komentare/">všechny komentáře uživatele</a></div>
    <p class="post">Změna názoru - tohle si jednu hvězdičku nezaslouží =(<span class="date desc">(29.7.2007)</span></p>
</li>

どうもありがとう、私の計画は次のようにすることでした:

string srxPathOfCategory = "//ul[@class='ui-posts-list']//li//img[@class='rating'] | //ul[@class='ui-posts-list']//li//strong[@class='rating']";
        foreach (var att in doc.DocumentNode.SelectNodes(srxPathOfCategory)) // | .//strong[@class='rating']")){
        {

            if (att.InnerText == "odpad!")  //odpad means rubbish
            {
                b[j] = att.InnerText; //saving "odpad!" for later use

            }
            if (att.Attributes["alt"] != null)

            {
                b[j] = att.Attributes["alt"].Value; //these values are from 1* to 5*****

            }
          if (att.InnerText != "odpad!" && att.Attributes["alt"] == null)//this is where the problems starts
            {
                   b[j] = "without user evaluation";

            }

            j++;
        }

このコードの問題は、att.InnerText == "odpad!" が見つからない場合です。または att.Attributes["alt"] != null 次の投稿に進み、そこからユーザー評価を取得します。ただ、評価が省略されていた投稿に、せめて何かを合わせたいと思います。

4

3 に答える 3

1

すべての助けに感謝しますが、問題はhtmlのxpathにありました。

私はこのようにそれを解決しました

string srxPathOfCategory = "//ul[@class='ui-posts-list']//li";

        foreach (var att in doc.DocumentNode.SelectNodes(srxPathOfCategory))
        {

            foreach (var child in att.ChildNodes.Skip(3)) // skipping first three nodes //- first one is whitespace - marked as #text child node, then there is h5 and third is //another whitespace marked as #text child node 
            {

                if (child.InnerText == "odpad!")
                {
                    b[j] = child.InnerText;
                    Console.WriteLine(b[j]);
                    Console.ReadKey();
                    break;

                }
                else if (child.Attributes["alt"] != null)
                {
                    b[j] = child.Attributes["alt"].Value;
                    Console.WriteLine(b[j]);
                    Console.ReadKey();
                    break;
                }
                else
                {
                    b[j] = "without user evaluation";
                    Console.WriteLine("hlupost");
                    Console.ReadKey();
                    break;
                }

            }
            j++;
        }
于 2013-02-24T14:15:02.993 に答える
0

「オッドパッド!」属性ではなく、要素にあります。

于 2013-02-24T01:53:44.440 に答える
0

ifステートメントを変更するとどうなりますか。1つだけが真実であるのに、なぜ3つのifステートメントがあるのですか?

// Is it "odpad" ?
if (att.InnerText == "odpad!")
{
    b[j] = att.InnerText;

}
// .. If not, is it starred?
else if (att.Attributes["alt"] != null)
{
    b[j] = att.Attributes["alt"].Value;

}
// If none of above, it must be this (default)
else
{
       b[j] = "without user evaluation";

}
于 2013-02-24T10:42:26.123 に答える