공백 없이 연결된 단어로 구성된 텍스트 문자열이 주어진 경우:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!