1

URL を受け取り、Web ページ内の 1 単語、2 単語、3 単語のフレーズ (および場合によっては X ワードのフレーズ) の出現回数をカウントするプログラムを作成します。

これが私が思いつくことができる最高のアルゴリズムです:

1)。HTMLタグを取り除く

2) すべてを小文字にする

3)テキストをスペースで分割し、それらをすべて配列に入れます

4) 各単語を反復処理し、単語ごとに、単語 [i]、単語 [i+1]、単語 [i+2] をハッシュテーブルに入れる必要があります。

衝突するたびに、その単語または 2 ~ 3 文字の単語フレーズの単語数を増やします。

私の質問は次のとおりです。

1) スペースと実行時間の点で、より効率的なソリューションを提供できる人はいますか?

2) C# で #1 を行う簡単な方法はありますか?
おそらくdomパーサーを使用して、すべての内部テキストを解析できます。

4

2 に答える 2

3

場合によっては、問題を単純化しすぎたり、一部のライブラリにすでに存在する機能を実装するために多大な労力を費やしたりする可能性があります。したがって、これは直接的な答えではなく、この問題に取り組む際にどのような道をたどるべきかについての提案になります。

実装したいプロセスは情報検索と呼ばれます。それは非常に広範で複雑ですが、幸いにもこの分野で多くの研究があります。その一部は、単語のngramを抽出することです(ngramは、連続する文字または単語のシーケンスのセットです)。

あなたが先に考えるべきいくつかの追加の問題をあなたに見せましょう:

  • 単語の文字の大文字化は重要ですか?
  • ドットは、文の終わりを示すために使用したい唯一の記号ですか?
  • ストップワードを除外しますか?ストップワードは、「a」、「the」、「I」、「my」などのフレーズに含めたくない単語です。
  • 言葉を止めたいですか?単語を元の形式からルート形式に変換します。たとえば、複数形から単数形に変換します。バスケットボール->バスケットボール

そして、HTMLから純粋なテキストを抽出するために:

  • ページに表示されているテキストのみを抽出しますか?
  • ヒントも抽出しますか?(画像の上にマウスを置いたときに表示されるもののように)
  • その他の非表示テキスト(メタタグなど)

原材料から情報を検索して抽出するライブラリがあります。「原材料」とは、検索エンジンがドキュメントにインデックスを付けるために、ドキュメント(html、doc、pdf、画像など)を処理し、テキストに変換する必要があることを意味します(たとえば、フレーズを抽出します)。ドキュメントのインデックスが作成されると、検索できます。.NET用のそのようなライブラリの1つは、Lucene.NETです。さまざまなステマー、アナライザー、フィルターをサポートします。

よくわかりませんが、htmlからテキストを抽出するためのライブラリもあると思います。

基本的に、あなたのアプローチは、それほど小さくないエラーレベルが許容できるいくつかのより単純なシナリオで機能する可能性があります。私は最近、情報検索に興味を持ち、それが本当に複雑で興味深いことに気づきました。目標によっては、このトピックを研究することでメリットが得られる場合があります。ここには、stackoverflowやその他のインターネットに関する多くの情報があります。

そして、この方法を選択した場合、Lucene.NETよりもLucene(元のLucene JAVAバージョン、Lucene.NETは.NETへの移植)に関する情報がはるかに多くなります。したがって、Lucene.NETの回答が見つからない場合は、Luceneのディスカッションをすぐに検索してください。

于 2011-11-12T16:08:20.420 に答える
1

あなたの質問に答えるために#2。

HtmlDocument doc = WebBrowser1.Document;
string text = doc.GetInnerText();

より効率的にしたい場合は、サフィックス trie を使用します (独自に記述する必要がある場合があります)。

http://en.wikipedia.org/wiki/Suffix_trie

接尾辞トライは、基本的に文字列の検索を配列の長さではなく文字列の長さに依存させます。彼らが検索エンジンで使用するようなものです。

于 2011-11-12T15:39:21.570 に答える