문자열을 비교하여 동일한 것을 나타내는 지 여부를 결정해야합니다. 이것은 약어 및 기타 작은 세부 사항이 다를 수있는 인간이 입력 한 사례 제목과 관련됩니다. 예를 들어, 다음 두 타이틀을 고려해비슷한 두 문자열이 얼마나 유사한 지 비교하기위한 알고리즘은 무엇입니까?
std::string first = "Henry C. Harper v. The Law Offices of Huey & Luey, LLP";
반대로 : 빨리이 가장 가능성이 하나의 동일한 것을 측정 할 수
std::string second = "Harper v. The Law Offices of Huey & Luey, LLP";
인간.
std::string firstNormalized = "henrycharpervthelawofficesofhueylueyllp";
: 그리고 내가 촬영 한 현재의 접근 방식은 모든 문자를 lowercasing 모든 문장 부호를 제거하고 공간을 제공하여 문자열을 정상화하는 것입니다,이 경우 비교
std::string secondNormalized = "harpervthelawofficesofhueylueyllp";
을, 하나는 서브 순서는 다른 것의 더 복잡한 변이를 상상할 수도 있지만 반드시 그런 것은 아니지만 중요한 하위 서열은 공통적입니다. 문자가 바뀌거나 맞춤법 오류가있는 경우와 같이 사람이 입력 할 때가끔 오류가있을 수도 있습니다.
아마도 어떤 종류의 문자 diff 프로그램이 도움이 될 수 있습니까? 체크 인 할 코드의 차이를 비교하기위한 좋은 회선 diff 프로그램을 보았습니다. 문자 기반으로 비슷한 것이 있습니까? 연속되는 문자의 수를 세 어서 비공유 문자에 비유 할 수 있다면 아마도 좋은 경험 일 것입니다.
결국, 나는 그것들을 동일하게 간주 할 것인지 아닌지에 관해서 부울 결정이 필요합니다. 완벽 할 필요는 없지만 이상적이지는 않습니다.
어떤 알고리즘을 사용하면 2 개의 문자열이 서로 얼마나 유사한 지에 대한 몇 가지 종류의 양을 제공 할 수 있습니다. 그러면 어떤 추론을 통해 예/아니오 응답으로 변환 할 수 있습니까?
나는 전에 Levenshtein 거리를 사용했습니다. 쉽게 구현할 수 있습니다 ... http://en.wikipedia.org/wiki/Levenshtein_distance – souldzin
Boost에 Levenshtein 거리가 있습니까? – WilliamKF
죄송합니다. 건설적인 것은 아닙니다 ... [위키 페이지를 찾고 있습니다] (http://en.wikipedia.org/wiki/String_metric). – djechlin