0

여러 상점의 제품 이름 인 문자열 배열이 있습니다. 이제 목록에있는 상점과 상관없이 동일한 제품을 포함하는 클러스터를 얻기 위해 해당 클러스터를 배열해야합니다. 예를 들어사용자 정의 거리 루비를 사용한 1 차원 문자열 클러스터링

는 :

data = ["Laptop Asus xd45jkl", 
     "Laptop Acer d3000", 
     "Notebooh Hp hxsss", 
     "Laptop Asus xd45jkl intel core i7", 
     "Laptop Acer d3000 intel core i5 4gb RAM" 
] 
desired_output = [["Laptop Asus xd45jkl", Laptop Asus xd45jkl intel core i7], 
      ["Laptop Acer d3000", "Laptop Acer d3000 intel core i5 4gb RAM"] 
      [""Notebooh Hp hxsss""] 
     ] 

제품 이름 사이의 거리가 나는 amatch gem에서 JaroWinkler로 생각했다. 이 문자열 배열의 클러스터링을 생성 할 수있는 알고리즘 또는 다른 방법이 있습니다.

답변

0

나는 이런 식으로 생각 :이 준수을 K-의미와 대규모 데이터 세트에 대한 성능에 대한 경우

data = ["Laptop Asus xd45jkl", "Laptop Acer d3000", "Notebooh Hp hxsss", "Laptop Asus xd45jkl intel core i7", "Laptop Acer d3000 intel core i5 4gb RAM" ] 
clusters = Hash.new 

data.each do |item| 
    brand = item.split[1] 
    clusters[brand] = [] if clusters[brand].nil? 
    clusters[brand] << item 
end 

clusters.map! { |k, v| v } 

잘 모르겠어요.

편집 : 50,000 개 항목에서 약 2 초가 걸립니다.