2016-11-15 6 views
1

사용자가 텍스트 문서 (약 2-3000 단어) 및 약 50,000 개의 구문 (문자열)을 업로드 할 수있는 웹 응용 프로그램이 있습니다.단일 문서에서 구문 찾기

업로드 된 각 문서에 어떤 문구가 가장 적합한 지 어떻게 알 수 있습니까? (즉, 각 구를 개별적으로 확인하여 무차별 적으로 강제하는 것보다 낫지 않습니까?)

웹 앱 흐름은 업로드 후 페이지로드에서 이상적이어야합니다. 앱은 해당 문서에서 발견 된 어구를 알고 있습니다.

이상적으로 나는 루비의 해결책을 원하지만, 다른 기술이나 데이터 구조 또는 다른 것들에 대한 제안은 실질적인 도움이 될 것입니다.

+2

두 번 이상 확인해야합니까? – Stefan

+0

개념적으로 각 구를 개별적으로 확인하는 것 외에는 다른 방법이 없다고 생각됩니다. 그래도 개별 점검을 더 빨리하기 위해 (색인 ​​등) 어떤 최적화 기법을 사용할 수 있습니다. –

+0

@ Stefan의 질문이 가장 적절합니다. 한 번만 해봐야 만하고, 무차별 적으로 강요하고 하루라고 부르십시오. 그것을 제외하고, 또 다른 적절한 질문은 : 당신의 문서가 얼마나 큰가요? 작은 문서 (예 : 셰익스피어의 * Comedy of Errors *)의 경우 가장 좋은 방법은 큰 문서 (예 : 셰익스피어의 전체 작품)와 다를 수 있습니다. –

답변

0

나는 데이터베이스 사용중인 모르는, 그래서 난 그냥 MySQL의 솔루션을 제공 : 그 다음 검색이 더 빠를 수 있도록

require 'mysql2' 

content = File.read('/path/to/document.txt') 

client = Mysql2::Client.new(:host => "localhost", :username => "root") 

sql = "SELECT phrase FROM phrases ORDER BY LENGTH(phrase)" 

appeared = client.query(sql, as: :array, stream: true).each.with_object([]) do |row, array| 
    array << row[0] if content.gsub!(%r[#Regexp.escape(row[0])]i, '') 
end 

아이디어는 각 경기 후 컨텐츠를 축소하는 것입니다.

면책 조항 : 테스트하지 않았습니다.

+0

@SergioTulentsev 감사합니다. 방금'String # gsub! '로 변경했습니다. – Aetherus

관련 문제