小さなC#アプリケーションを作成していて、単純なプレーンテキストからタグクラウドを抽出したいと思います。それができる機能はありますか?
10 に答える
タグ クラウドの構築は、私が見ているように、2 つの部分からなるプロセスです。
まず、トークンを分割してカウントする必要があります。文書の構造や言語によっては、スペースで区切られた単語を数えるのと同じくらい簡単かもしれません。ただし、これは非常に素朴なアプローチです。the、of、a などの単語は単語数が最も多く、タグとしてはあまり役に立ちません。最も一般的で無意味なタグを除外するために、ある種の単語ブラック リストを実装することをお勧めします。
(タグ、カウント) 方法で結果を取得したら、次のコードのようなものを使用できます。
(Searches は SearchRecordEntity のリストであり、SearchRecordEntity はタグとそのカウントを保持します。SearchTagElement は TagCategory 属性を持つ SearchRecordEntity のサブクラスであり、ProcessedTags は結果を保持する SearchTagElements のリストです)
double max = Searches.Max(x => (double)x.Count);
List<SearchTagElement> processedTags = new List<SearchTagElement>();
foreach (SearchRecordEntity sd in Searches)
{
var element = new SearchTagElement();
double count = (double)sd.Count;
double percent = (count / max) * 100;
if (percent < 20)
{
element.TagCategory = "smallestTag";
}
else if (percent < 40)
{
element.TagCategory = "smallTag";
}
else if (percent < 60)
{
element.TagCategory = "mediumTag";
}
else if (percent < 80)
{
element.TagCategory = "largeTag";
}
else
{
element.TagCategory = "largestTag";
}
processedTags.Add(element);
}
http://thetagcloud.codeplex.com/を使用することを強くお勧めします。タグのグループ化、カウント、およびレンダリングを処理する非常にクリーンな実装です。また、フィルタリング機能も提供します。
これはASP.NET Cloud CONtrolです。これは、少なくとも開始するのに役立つ可能性があり、完全なソースが含まれています。
CodeProjectのプロジェクトである WordCloudを参照してください。これには 430 個のストップ ワード ( 「 the
、 」 an
、a
「」など) が含まれており、Porter ステミング アルゴリズムを使用します。このアルゴリズムは、単語を語根に減らして、「ステミングされたステミング ステム」がすべて同じ単語の 1 回の出現としてカウントされるようにします。
それはすべて C# で行われます。作成するビジュアライゼーションの代わりに HTML を出力するように変更するだけです。
これを見てください。それは私のために働いた。これを解決するのに役立つ WebExample という名前の Examples フォルダーの下にプロジェクトがあります。 https://github.com/chrisdavies/Sparc.TagCloud
アルゴリズムについては、この回答をご覧ください。
Wordle のようなワード クラウドを実装するアルゴリズム
回答に記載されている「DisOrganizer」は、目的に役立つ可能性があります。少し変更するだけで、この「ディスオーガナイザー」にイメージを提供させることができます。PS: コードは C# で書かれています https://github.com/chandru9279/zasz.me/blob/master/zasz.me/
これがまさにあなたが探しているものかどうかはわかりませんが、始めるのに役立つかもしれません:
単語の頻度をカウントするLINQ(VBですが、現在C#に変換しています)
Dim Words = "Hello World ))))) This is a test Hello World"
Dim CountTheWords = From str In Words.Split(" ") _
Where Char.IsLetter(str) _
Group By str Into Count()
カテゴリとそれに含まれるアイテムの量を、ある種のコレクションまたはデータベース テーブルに格納できます。
そこから、特定のカテゴリのカウントを取得し、特定の境界を持つことができます。したがって、パラメーターはカテゴリであり、戻り値はカウントです。
そのため、カウントが 10 を超えて 20 未満の場合、.CSS スタイルを特定のサイズのリンクに適用します。
これらのカウントをキーとしてコレクションに保存し、キーが戻り値と一致する値を取得できます (前述のとおり)。
このプロセスのソース コードは手元にありませんが、これらすべてを実行するための単純な関数も見つかりません。コントロール、はい (上記のように)。
これは非常に伝統的なアプローチであり、雑誌のチュートリアルなどで見た標準的な方法であり、私が考える最初のアプローチです (必ずしも最良であるとは限りません)。
特定のソース (テキスト ファイルおよびその他のソース) からキーワードを抽出し、TagCloud を Zooming User Interface (ZUI) として表示するZoomable TagCloud ジェネレーター