2

繰り返しの文/句を見つけて、段落またはドキュメントでそれらの頻度を数えたい。

例: 段落:

[挿入] タブでの場合、ギャラリーには、ドキュメントの全体的な外観と調和するように設計されたアイテムが含まれています。これらのギャラリーを使用して、表、ヘッダー、フッター、リスト、表紙、およびその他の文書構成要素を挿入できます。画像、チャート、または図を作成すると、それらは現在のドキュメントの外観にも調整されます。[ホーム] タブの [クイック スタイル] ギャラリーから選択したテキストの外観を選択することで、ドキュメント テキスト内の選択したテキストの書式を簡単に変更できます。[ホーム] タブの他のコントロールを使用して、テキストを直接書式設定することもできます。ほとんどのコントロールでは、現在のテーマの外観を使用するか、直接指定した形式を使用するかを選択できます。ドキュメントの全体的な外観を変更するには、[ページ レイアウト] タブで新しいテーマ要素を選択します。クイック スタイル ギャラリーで利用可能な外観を変更するには、[現在のクイック スタイル セットを変更] コマンドを使用します。テーマ ギャラリーとクイック スタイル ギャラリーの両方にリセット コマンドが用意されているため、ドキュメントの外観を現在のテンプレートに含まれている元の状態にいつでも復元できます。[挿入] タブのギャラリーには、ドキュメントの全体的な外観と調和するように設計されたアイテムが含まれています。

繰り返される文/句の 1 つは、「挿入タブで」です。その度数は2です。それらをすべて見つける方法は?

何か考えはありますか?

どうもありがとう!

4

2 に答える 2

0

これは力ずくで達成できるため、アルゴリズム設計の問題のように思えますが、優れた分割統治ソリューションも必要です。

@justinvf が述べているように、意味のある結果を得るには、最初に最小の長さを定義する必要があります。そうしないと、最も頻繁に使用されるe文字 (英語で) であるため、最も繰り返されるフレーズはほぼ確実に になります。

力ずくの方法はstr[0:m]...[0+1:m+1]...、段落の最後まで部分文字列を使用して、最小長 $m$ のすべてのフレーズをカウントし、繰り返しをカウントすることです。次に、増分を 2 に増やして繰り返します。時間の複雑さは $\mathcal{O} (n^{nm})$ のようなものになるようです $n$ は段落の文字数です。

T̶h̶e̶ ̶d̶i̶v̶i̶d̶e̶ ̶a̶n̶d̶ ̶c̶o̶n̶q̶u̶e̶r̶ ̶a̶p̶p̶r̶o̶a̶c̶h̶ ̶w̶o̶u̶l̶d̶ ̶b̶e̶ ̶t̶o̶ ̶r̶e̶c̶u̶r̶s̶i̶v̶e̶l̶y̶ ̶f̶o̶l̶l̶o̶w̶ ̶t̶h̶e̶s̶e̶ ̶s̶t̶e̶p̶s̶:̶ ̶ ̶1̶.̶ ̶C̶a̶l̶c̶u̶l̶a̶t̶e̶ ̶t̶h̶e̶ ̶p̶h̶r̶a̶s̶e̶-̶f̶r̶e̶q̶u̶e̶n̶c̶e̶ ̶i̶n̶ ̶t̶h̶e̶ ̶L̶H̶S̶ ̶o̶f̶ ̶t̶h̶e̶ ̶s̶t̶r̶i̶n̶g̶ ̶2̶.̶ ̶C̶a̶l̶c̶u̶l̶a̶t̶e̶ ̶t̶h̶e̶ ̶p̶h̶r̶a̶s̶e̶-̶f̶r̶e̶q̶u̶e̶n̶c̶e̶ ̶i̶n̶ ̶t̶h̶e̶ ̶R̶H̶S̶ ̶o̶f̶ ̶t̶h̶e̶ ̶s̶t̶r̶i̶n̶g̶ ̶3̶.̶ ̶C̶a̶l̶c̶u̶l̶a̶t̶e̶ ̶t̶h̶e̶ ̶p̶h̶r̶a̶s̶e̶- ̶f̶r̶e̶q̶u̶e̶n̶c̶e̶ ̶f̶o̶r̶ ̶'̶s̶p̶l̶i̶t̶'̶ ̶s̶t̶r̶i̶n̶g̶s̶.̶.̶ ̶i̶.̶e̶.̶ ̶o̶n̶e̶s̶ ̶t̶h̶a̶t̶ ̶s̶t̶r̶a̶d̶d̶l̶e̶ ̶t̶h̶e̶ ̶m̶i̶d̶p̶o̶i̶n̶t̶ ̶o̶f̶ ̶t̶h̶e̶ ̶s̶t̶r̶i̶n̶g̶.̶ ̶ ̶T̶h̶i̶s̶ ̶i̶s̶ ̶o̶f̶f̶ ̶t̶h̶e̶ ̶t̶o̶p̶ ̶o̶f̶ ̶m̶y̶ ̶h̶e̶a̶d̶ ̶s̶o̶ ̶t̶h̶e̶r̶e̶ ̶m̶a̶y̶ ̶b̶e̶ ̶u̶n̶f̶o̶r̶s̶e̶e̶n̶ ̶c̶o̶m̶p̶l̶i̶c̶a̶t̶i̶o̶n̶s̶ ̶I̶'̶m̶ ̶n̶o̶t̶ ̶t̶h̶i̶n̶k̶i̶n̶g̶ ̶o̶f̶,̶ ̶b̶u̶t̶ ̶t̶h̶e̶ ̶p̶r̶i̶n̶c̶i̶p̶l̶e̶ ̶i̶s̶ ̶t̶h̶e̶r̶e̶.̶ ̶ ̶T̶B̶H̶ ̶t̶h̶i̶s̶ ̶s̶o̶u̶n̶d̶s̶ ̶l̶i̶k̶e̶ ̶a̶ ̶p̶r̶o̶b̶l̶e̶m̶ ̶t̶h̶a̶t̶ ̶c̶o̶m̶e̶s̶ ̶f̶r̶o̶m̶ ̶a̶n̶ ̶a̶l̶g̶o̶r̶i̶t̶h̶m̶ ̶d̶e̶s̶i̶g̶n̶ ̶t̶e̶x̶t̶b̶o̶o̶k̶ ̶a̶n̶d̶ ̶p̶r̶o̶b̶a̶b̶l̶y̶ ̶h̶a̶s̶ ̶a̶ ̶v̶e̶r̶y̶ ̶n̶e̶a̶t̶ ̶s̶o̶l̶u̶t̶i̶o̶n̶ ̶s̶o̶m̶e̶w̶h̶e̶r̶e̶ ̶a̶l̶r̶e̶a̶d̶y̶.̶

編集:ただし、最も最適な解決策は、サフィックス ツリーを構築することです。

于 2013-02-01T07:32:20.750 に答える
0

まず、「フレーズ」の意味を定義する必要があります。一致する単語の最小数、たとえば 4 として定義できる場合は、すべての4-gram を生成するドキュメントを調べることができます。それらを 4 グラムから場所までのマップに配置すると、その方法で一致するものをすばやく見つけることができます。

于 2013-02-01T05:21:33.997 に答える