2012-10-18 2 views
0

큰 문자 열 description을 최대 500 단어까지 사용할 수 있습니다. description 통해Root에서 텍스트를 반복하여 미리 정의 된 단어와 단어 쌍을 추출합니다.

  1. 루프와 하나의 단어, 단어 쌍 및 워드 세 쌍둥이를 포함 배열 keywords에서 미리 정의 된 단어의 다수를 찾습니다 : 나는 다음을 수행하고 싶습니다.
  2. 일치하는 항목이 발견 될 때마다이 배열을 새 배열 matches에 추가하고 (이 과정의 앞부분에 이미 추가 된 경우는 제외) description에서 일치하는 단어를 제거하십시오.

나는 해결책을 찾아 보았지만, 대부분 자연 언어 처리의 마지막 단계에 지나치게 복잡해 보이거나 현재의 요구에 너무 복잡하거나 단순히 텍스트 문자열을 분할하는 것처럼 보입니다. 공백은 단어 쌍을 찾을 수 없다는 것을 의미합니다.

이 작업을 효율적으로 수행하는 방법에 대한 아이디어는 대단히 감사하겠습니다.

+0

effeiecnt로 보는 당신의 주요 관심사는 '미리 정의 된 단어의 많은 수는'상당히 정적이다? 아니면 역동적입니까? '효율적'이란 말은 '기억력이 뛰어난'또는 '효과적'이라는 뜻입니까? 효율적인 WRT DRY 및 간결한 코드? – RadBrad

+0

예, 미리 정의 된 단어의 수가 상당히 정적이고 아마도 300-400 정도일 것입니다. DRY와 간결한 코드에서 효율적이라는 말은 아주 자주 사용되지 않는 백그라운드 프로세스에서 사용되는 것처럼 가장 빠른 성능의 코드라는 사실은 중요하지 않습니다. 희망이 약간의 문맥을 제공합니까? – simonrohrbach

답변

1
description = "The quick brown fox jumped over the lazy dog, and another brown dog" 

keywords = ["brown", "lazy", "apple"] 

matches = [] 

keywords.each do |keyword| 
    matches << description.match(keyword).to_s if description.match(keyword) 
end 

puts matches 
#=> ["brown", "lazy"] 

matches.each do |keyword| 
    description.gsub!(Regexp.new(keyword), '') 
end 

description.gsub!(' ', ' ') 

puts description 
#=> "The quick fox jumped over the dog, and another dog" 
0

당신은

루프 끝에 설명

If word matches exactly with description text then increase the threshold frequency by 1 point 

에서 텍스트를 배열의 각 단어에 대한 임계 주파수를 설정할 수 0 새로운 배열 경기에에 넣어보다 주파수 강판 단어 누가와 , description 예를 들어

에서 삭제

If any word repeated for 2 times, 
It's frequency will be 0 + 2 and 
Initially it should be 0. 
0

이것은 나에게 발생한 원유 해킹 :

keywords.select do |keyword| 
    description =~ /\b#{Regexp.escape(keyword)}\b/ 
    # -or- 
    description.gsub(/\b#{Regexp.escape(keyword)}\b/) do |match| 
    # whatever 
    end 
end 
관련 문제