2016-07-26 3 views
0

을 사용하여 열 ABN-AMRO-NV/SUNTRUST-BK/WACHOVIA 및 문자열이 인 열이 있음 x이 있습니다. 보시다시피, x 열에는 슬래시로 구분 된 세 개의 문자열이 있습니다. 따라서 퍼지 매칭을하기 전에 문자열을 분리하려면 strsplit을 사용하여 분할해야합니다. 퍼지 매칭을하려면 stringdist, adist, agrep 등과 같은 패키지를 사용해 보았습니다. 그러나 예상대로 좋은 결과를 얻지 못했습니다.퍼지 문자열 매칭 R

내 일치하는 문제를 해결하는 좋은 방법은 무엇입니까?. 좋은 결과를 얻기 위해이 일치하는 문제에 어떻게 접근 할 수 있습니까? 이 예에서 볼 수 있듯이 은 SUNTRUST-BK이라는 단어와 일치하며 결과적으로 퍼지 일치를 사용하려고합니다.

또한 메모를 제공하기 위해 x 열과 y 열의 내 문자열이 많이 달라집니다. 예를 들어, x 열에있는 문자열에는 슬래시가 없기 때문에 문자열 하나만을 의미합니다.

귀하의 도움과 안내에 모두 감사드립니다.

+0

"내가 기대했던만큼 좋지 않니?" 또한, 당신은 항상 작은 선택에서 하나의 매치가 있습니까? 예제의 경우 거의 모든 간단한 방법이 중간 옵션을 최상의 일치로 식별 할 수 있어야합니다. (levenshtein 거리를 사용하는 앞에서 언급 한 'agrep'포함). –

+0

막연한 경우 죄송합니다. 나는 다양한 맥스로 시도했다는 것을 의미했다. 일치하는 패키지를 사용하여 거리. 최대 세트 거리가 적은 문자열에는 효과가 있었지만 나머지 문자열에는 효과가 없었습니다. 내 열'x '는 매우 커서 문자열은 많이 다릅니다. – Santosh

+0

아마도 이미 성공한 곳이 아닌 일반적인 방법으로 접근해야합니다. 특히 실패 할 필요가 없다고 생각하는 사례. - 운이 좋다면이 예제를 생각해 보면 문제 해결 방법에 대한 아이디어를 얻을 수 있습니다! –

답변

1

아래 예를 살펴보십시오. 방금 랜덤 매칭 방법 (이 경우 JaroWinkler)을 사용했습니다.

library(stringdist) 

fuzzy_select<-function(name_vec,name){ 
    Filter(function(x) ain(x, name, maxDist=.7, method="jw"), 
     strsplit(name_vec, "/")[[1]]) 
} 

fuzzy_select("ABN-AMRO-NV/SUNTRUST-BK/WACHOVIA", "SunTrust Banks") 

당신은 maxDistSUNTRUST-BKSunTrust Banks 사이의 일치를 찾기 위해 상당히 높은 수있다시피. 아마도 일치하기 전에 사전 처리를하고 싶을 것입니다 (예 : 소문자로 변환, 구두점 제거).

+0

고마워요. 'SUNTRUST-BK '가 아니라'SunTrust Banks'를 어떻게 돌려 줄 수 있을까요? 나는 'ain'에서 순서를 바꾸었지만 작동하지 않는 것 같습니다. – Santosh