この記事では、スペースのないテキスト文字列を単語のリストに効率的に分割する複雑さを掘り下げます。意味のある単語のリスト。私たちは、現実世界のデータに対して正確な結果を得るために単語の頻度を活用するアルゴリズムを検討します。
このアルゴリズムは、Zipf の法則に従い、単語が独立して分布しているという仮定の下で動作します。これは、辞書内でランク「n」の単語が出現する確率は約 1/(n log N) であることを意味します。ここで、N は辞書内の単語の総数を表します。
スペースでは動的プログラミングを採用しています。単語確率の逆数の対数を利用するコスト関数を定義します。最適な文は、個々の単語コストの積を最大化します。これは、動的プログラミングを使用して効率的に計算できます。
次の Python コードは、アルゴリズムを実装します。
<code class="python">import math words = open("words-by-frequency.txt").read().split() wordcost = dict((k, log((i+1)*log(len(words)))) for i,k in enumerate(words)) maxword = max(len(x) for x in words) def infer_spaces(s): cost = [0] for i in range(1,len(s)+1): c,k = best_match(i) cost.append(c) out = [] i = len(s) while i>0: c,k = best_match(i) out.append(s[i-k:i]) i -= k return " ".join(reversed(out))</code>
提供されたコードを使用して、テキスト文字列をスペースなしで分割し、意味のある文字列を取得できますWords:
s = 'thumbgreenappleactiveassignmentweeklymetaphor' print(infer_spaces(s))
アルゴリズムはスペースの位置を効果的に推測し、短いテキスト文字列と長いテキスト文字列の両方に対して正確な単語認識を実現します。明示的な区切り文字がない場合でも、出力は高レベルの一貫性と可読性を維持します。
アルゴリズムにはいくつかの利点があります。
以上がスペースのないテキストを単語のリストに分割するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。