처음에는 최근 몇백 개의 주제에 대해서는 수동으로 카테고리를 다시 지정하고, 오래된 주제들은 그대로 두는 것을 고려했습니다.
미래를 지향하되 과거에는 집착하지 않겠다는 것이었습니다. 오래된 주제가 잘못 분류되어 있더라도 크게 문제가 되지 않으며, 가장 중요한 것은 여전히 접근 가능하다는 점입니다.
하지만 키워드를 대상으로 주제를 자동으로 재분류하는 것이 실제로 좋은 결과를 낼 수 있을지 궁금합니다.
현재 우리 포럼 주제의 압도적 다수(전체의 절반 이상!)가 단일 카테고리에 속해 있습니다. ()
제목에 포함된 “learn”, “learning”, “train”, “training”, “posture” 등의 키워드를 대상으로 할 수 있습니다. 그리고 이 모든 주제를 #riding-advice 카테고리에 넣을 수 있습니다.
“frame”, “wheel”, “tire”, “saddle” 등도 마찬가지입니다. 이 경우 #unicycles-and-equipments 카테고리에 들어가게 됩니다.
공백으로 감싸진 단어들을 대상으로 하고, 여러 단어로 이루어진 표현을 미리 파악하여 "잘못된 매칭(false positive)"을 조금이라도 방지하려 합니다. 예: "wheelwalking"은 유니사이클 트릭의 일종으로, 아마 #riding-advice에서 찾아야 할 것입니다. 따라서 "wheel"만 무심코 대상으로 삼으면 쉽게 피할 수 있었던 잘못된 매칭이 발생할 수 있습니다(물론, "wheel"이 포함된 주제를 A에서 B로 옮긴 다음, "wheelwalking"이 포함된 주제를 B에서 C로 옮기는 방식도 가능합니다).
여기서 이런 작업을 해본 분이 계신가요? "잘못된 매칭"의 위험을 최소화할 수 있는 제안이나 아이디어가 있을까요? 이 작업을 하기 전에 알아야 할 명백하거나(혹은 그렇지 않은) 사항들이 있을까요?
다만 이 방법을 시도해 볼 시간이나 기술은 아마 없을 것 같습니다 (포럼이 한 달 넘게 다운되어 있고, 아직 해야 할 일이 산더미처럼 많거든요!).
처음 시도해 본 결과, 키워드를 수동으로 선택하는 방식이 꽤 좋은 결과를 내는 것 같습니다. 아직 재분류는 하지 않았고, SQL 쿼리로만 실험해 본 상태입니다.
select title from topics
where category_id = 10
and lower(title) not like '%saddle%'
and lower(title) not like '%crank%'
and lower(title) not like '%pedal%'
and lower(title) not like '%rim%'
and lower(title) not like '%carbon%'
and lower(title) not like '%spoke%'
and lower(title) not like '%wheel%'
and lower(title) not like '%frame%'
and lower(title) not like '%hub%'
and lower(title) not like '%tubeless%'
and lower(title) not like '%disk%'
and lower(title) not like '%hydraulic%'
and lower(title) not like '%duro%'
and lower(title) not like '%dominator%'
and lower(title) not like '%torker%'
and lower(title) not like '%nimbus%'
and lower(title) not like '%bearing%'
and lower(title) not like '%pad%'
and lower(title) not like '%repair%'
and lower(title) not like '%handlebar%'
and lower(title) not like '%kh%'
and lower(title) not like '%kris holm%'
and lower(title) not like '%coker%'
and lower(title) not like '%tube%'
and lower(title) not like '%build%'
and lower(title) not like '%29er%'
and lower(title) not like '%36er%'
and lower(title) not like '%backwards%'
and lower(title) not like '%riding%'
and lower(title) not like '%foot%'
and lower(title) not like '%train%'
and lower(title) not like '%training%'
and lower(title) not like '%learn%'
and lower(title) not like '%learning%'
and lower(title) not like '%dismount%'
and lower(title) not like '%habit%'
and lower(title) not like '%idle%'
and lower(title) not like '%idling%'
and lower(title) not like '%freemount%'
and lower(title) not like '%free mount%'
and lower(title) not like '%free mounting%'
이 쿼리는 메인 카테고리에서 재분류가 가능한 52,000개 주제 중 33,000개를 반환합니다. 숫자는 현실적으로 보이지만, 여전히 더 많은 키워드를 추가해야 할 것 같습니다.
제가 그의 Discourse 관련 작업을 여러 번 도운 적이 있는데, 기억이 정확하지는 않지만, 그는 데이터 가져오기 이후에 Rails 스크립트를 사용했던 것으로 기억합니다. 그는 제목의 키워드를 기준으로 주제를 선택한 후, 주제 이동과 같은 공식 문서화된 명령어를 사용했습니다. 예: Administrative Bulk Operations.
또한, 태그가 있는 주제를 이동할 때 공식 명령어와 rake 태스크를 사용해도 일부 테이블이 완전히 업데이트되지 않았고, 관련 주기적 Sidekiq 작업도 이를 처리하지 못했던 것으로 기억합니다.