나는 가장 긴 공통 부분 문자열을 찾기 위해 접미어 배열을 사용하는 http://portal.acm.org/citation.cfm?id=1813708에 알고리즘을 구현하고 있습니다. 알고리즘은 지정된 문자열 집합과 센티넬이라는 문자열 구분 기호를 연결 한 문자열에 대한 접미어 배열을 만드는 작업과 관련됩니다. 예를 들어, 문자열 a, b 및 c가 주어지면 $ 1b $ 2c $ 3 인 새 문자열 d가 만들어집니다. $ 1, $ 2, $ 3은 각 문자열의 끝을 표시하는 센티널 문자입니다. 센티넬 문자는 a, b 및 c의 다른 모든 문자보다 고유하고 사전 식이어야합니다.접미사 배열을 구성하기 전에 파이썬에서 문자열 센티널의 끝 지정
내 질문은 파이썬에서 센티넬 문자 표현을 중심으로 이루어집니다. a, b 및 c가 ASCII 문자열 인 경우 해당 문자열을 UTF-8로 변환하고 해당 범위를 0-127에서 높은 범위로 변경해야 할 수도 있습니다. 따라서 사전 적으로 사용할 수있는 문자가 현. 이것이 합리적이라면 파이썬에서 문자를 다시 매핑하는 가장 효율적인 메커니즘은 무엇입니까? 범위는 N-127 + N입니다. 여기서 N은 제공된 문자열의 수입니까?
감사합니다. 나는 현재 당신이 제안한대로 정수를 사용하기 위해 유니 코드 버전을 재 구현하고있다. 유니 코드는 극복해야 할 몇 가지 규모 제한을 도입했습니다. 참조에 대한 포인터를 감사하십시오. 이들 중 일부는 아직 보지 못했습니다. 다시 한번 감사드립니다. – Chris
몇 가지 생각 : 긴 반복이있는 경우 문자열 정렬 대신 접미사 정렬 알고리즘이 필요합니다. 그러나 문자열 정렬을 사용하는 경우 스택 오버플로 직전에 텍스트의 어떤 부분이 정렬되었는지보고하도록 수정하십시오. 자연어 텍스트의 경우 긴 반복은 따옴표, 잘라 내기 붙여 넣기, 표절 등으로 ngram 통계가 왜곡되지 않도록 제거해야합니다. 다른 가장 긴 반복을 찾으려면 암시 적 간격 트리를 탐색하고 doc_freq> k를 사용하여 최대 값을 수집하고 우선 순위 대기열에 넣습니다. 그것은 간단한 생각이지만 인용 된 논문이 더 나을 것 같지 않습니다. –