2016-07-07 3 views
0

나는 텍스트의 긴 구절에서 키워드 주위의 영역을 추출하려고합니다. 그들은 다음과 같은 조건에 따라 완전한 문장이 포함되어야합니다 :정규식을 사용하여 문장을 확장하십시오.

  • N = 250 Charactars 기존의 경우 키워드가 포함되어야 후
  • (키워드는 텍스트의 시작/끝이 다음 가까운 될 수 있습니다) 전에/
  • 는 완전한 문장을 포함하도록 더욱 확대 될 전망이다 거기에서 (의 여기 가정 우리가 문장의 경계를 정의 할 수 있도록 "또는 :.?!"완전히 정확하지 알면서)

나는 이미 끝으로 확장을 달성 마지막 문장이지만 다음 예에서 첫 번째 문장은 시작하지 않습니다. 여기서 vitami n이 키워드이고 이탤릭체는 정규식에 의해 캡쳐됩니다. 그러나, 그것은 "여분의 24 시간에서 캡처해야합니다 ..." 분명히, 나는 게으른을 사용하거나 lookbehind를 사용하여 앞에서 해당 그룹을 얻을하지 않습니다.

((.{0,250}(vitamin)\b.{0,250})(.+?(\.|\!|\?|\:))?)/ig 

글쎄, 당신은 여분의 날이 세금에 출세하거나 받고있어 올해는 (마지막으로) 차고를 청소합니다. (Hey, 우리는 당신에게 무엇을 말하려고하지는 않지만 생산적일지도 모릅니다.) 2 월 29 일은 윤년이기 때문에 올해 달력에 다시 나타납니다. 여분의 겨울날을 좋아하든 싫어하든, 왜 처음에는 그렇게되는지 궁금 할 것입니다. 추가 24 시간 - 또는 하루 -는 태양 주위의 지구 운동과 일렬로 정렬되도록 4 년마다 한 번 달에 건설됩니다. 1 년 동안 365 일이 걸리지 만 실제로 지구의 연간 여행 (대략 365.2421 일)에 빛과 생명력을주는 별 주위에는 더 오래 걸립니다. 비타민 D.이 차이는 우리에게 별 차이가없는 것처럼 보일 수 있습니다. 시간이 지남에 따라 합산됩니다. "진정한 천문학적 인 해와 일관성을 유지하기 위해서는 잃어버린 시간을 보충하고 하늘과 동기화 된 달력을 되 찾을 수있는 여분의 날을 주기적으로 추가해야합니다." com. 윤년의 필요성에 대한 인정은 줄리어스 시저의 시대에 일어났습니다. 이 매 4 년마다 윤년을 포함하여 12 개월 365 일이되도록 기원전 46 년 카이사르는 달력을 업데이트 천문학 Sosigenes의 도움을 입대,

답변

0

당신은이 같은 시도 할 수 있습니다.

(([.?!:][^.?!:]*.{250}\bvitamin\b.{250})[^.?!:]*[.?!:]) 

"vitamin"키워드 전후에 250 자의 텍스트를 소비합니다. 이 지점에서 텍스트의 250 자 전후에 첫 번째 구두점 (.?!:)을 찾습니다.

여기는 sample of it in action입니다.

여분의 괄호 ()을 사용하여 원하는 정확한 출력을 전략적으로 그룹화 할 수 있습니다. 예를 들어, 위의 대답에는 출력의 앞 문장에서 끝나는 기간이 포함됩니다. 따라서 당신은

(([.?!:]([^.?!:]*.{250}\bvitamin\b.{250})[^.?!:]*[.?!:])) 

을 사용할 수 있으며이 종료 기간이없는 결과 집합에서 3을 사용할 수 있습니다.

+0

키워드 전후에 250 자 미만인 경우이 작업은 실패합니다. – fabianegli

+0

고마워, 나는 그걸로 놀거야 :) –

0

질문의 스펙이 정규식과 어떻게 일치 하는지를 알 수 없습니다.그것은 다음과 같은 논리 문제로 귀결 :

  • 키워드 후, .{0,250} 욕심 필요하기 전에/많은 가능한 문자하지만 250 개 이상의 일치하지 않고 할 수있는 둘 지연 될 .{0,250}?도 소유 .{0,250}+
  • 이 부분이 탐욕 스럽다면 .{0,250} 부분이 일치하기 전에 시작되는 키워드의 발생을 놓치게됩니다.

동일한 논리가 내 이해에 '경기 시작과 일치하는 부분까지도 적용됩니다.

나는 다음과 같은 다소 의미있는 정규 표현식으로 주위 재생 :

[.?!:]?([^.?!:]*?(.{0,250}\byear\b.{0,250})[^.?!:]*[.?!:]?) 미스를 첫 번째 '올해의

[.?!:]?([^.?!:]*?(.{0,250}?\byear\b.{0,250})[^.?!:]*[.?!:]?) 첫'올해 얻을 수 있지만, 다른 사람에 실패합니다.

내가 원하는 추출을 달성하기 위해 정규 표현식을 사용할지 여부를 결정하는 eihter 함수에서 추출 논리를 작성하는 것이 좋습니다.

예를 들어 키워드 \bkeyword\b의 시작 색인을 찾을 수 있으며 전체가 (\.[^\d]|[.?!:]$)으로 중지 된 다음이 정보를 사용하여 원하는 텍스트 부분을 추출 할 수 있습니다.

+0

안녕, 고마워. 그게 슬픈 입찰가인데도 불구하고 실패한 것은 사실이지만, 생산 소프트웨어가 아니라 데이터를 가지고 놀 수 있습니다. 지금 당장은 내가 가진 것만으로도 충분할 것입니다. –

관련 문제