スペースを含まずに連結された単語で構成されるテキスト文字列があるとします:
Input: "tableapplechairtablecupboard..."
このテキストを個々の単語のリストに効率的に分割するにはどうすればよいですか?
Output: ["table", "apple", "chair", "table", ["cupboard", ["cup", "board"]], ...]
簡単なアプローチは、テキスト内で可能な限り長い単語を繰り返し見つけることです。ただし、これは次善の結果につながる可能性があります。
代わりに、言語内の単語の相対頻度を利用して精度を向上させることができます。
動的プログラミング アプローチ:
<code class="python">from math import log wordcost = {} # Dictionary of word costs using Zipf's law maxword = max(len(word) for word in wordcost) def infer_spaces(s): cost = [0] for i in range(1, len(s) + 1): candidates = enumerate(reversed(cost[max(0, i - maxword):i])) c, k = min((wordcost.get(s[i - k - 1:i], 9e999) + c, k + 1) for k, c in candidates) cost.append(c) out = [] i = len(s) while i > 0: c, k = best_match(i) assert c == cost[i] out.append(s[i - k:i]) i -= k return " ".join(reversed(out))</code>
このアルゴリズムは、テキストを単語のリストに正確に分割できます。スペースがないこと。
例:
Input: "tableapplechairtablecupboard..." Output: ["table", "apple", "chair", "table", ["cupboard", ["cup", "board"]], ...]
最適化:
以上がスペースを含まずに単語が連結されたテキスト文字列を個々の単語に効率的に分割するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。