2009-08-27 2 views
1

구절에서 문장 구절을 어떻게 파싱합니까? 한 구절 또는 단락에서 대문자 구절을 찾는 법

는이 구절

에서 예를 들어 코난 도일은 홈즈의 문자가 도일은 에딘버러 로얄 의무실에서 점원으로 일했다 누구를 위해 박사 조셉 벨, 영감을 얻었다 고 말했다. Holmes와 마찬가지로, Bell은 가장 작은 관찰 결과에서 큰 결론을 이끌어 냈습니다. [1] Michael Harrison은 Ellery Queen의 Mystery Magazine의 1971 년 기사에서이 문자는 1882 년에 영국에서 많은 신문의 주목을받은 살인 사건에서 "컨설팅 형사"인 Wendell Scherer로부터 영감을 받았다고 주장했다.

우리는

+0

이 정확히 문장의 경우 구문이 무엇인지 구체적으로 기재 할 수 있습니까? (단지 예제를 제공하는 것보다는 예제를 사용하는 것도 유용합니다) –

+0

"문장의 경우"는 정확히 무엇을 의미합니까? – Triptych

+0

나는 OP가 어느 단어가 대문자로 시작해야 하는지를 결정하고 분석하는 방법을 알고 싶어한다고 생각한다. – ChrisW

답변

5

처리의이 종류는 매우 까다로운 일이 될 수있는 가능한 경우 등 코난 도일, 홈즈 박사는 조셉 벨, 웬델 Scherr는 같은 물건을 생성하는

나는 파이썬 솔루션을 선호하는 것이다.

for s in re.finditer(r"([A-Z][a-z]+[. ]+)+([A-Z][a-z]+)?", text): 
    print s.group(0) 

가 생산 :

Conan Doyle 
Holmes 
Dr. Joseph Bell 
Doyle 
Edinburgh Royal Infirmary. Like Holmes 
Bell 
Michael Harrison 
Ellery Queen 
Mystery Magazine 
Wendell Scherer 
England 

, 당신은 "에서 허용하는 문자열의 기간에 확인해야"박사 조셉 벨 "을 포함하려면이 간단한 코드는 거의 옳은 일을 수행 에딘버러 왕 부속 진료소.

비슷한 문제가 발생했습니다 : Separating Sentences.

+2

일반적인 경우에 "홈즈처럼"오류를 수정하는 것은 실제로 매우 어려운 문제입니다. OP에게 더 많은 정보를 얻기 위해 문장 청킹 및 엔티티 추출을 연구하고 nltk를 확인하십시오. – Triptych

+0

나는이 솔루션을 생각했지만 몇 가지 오 탐지에 빠졌고 실제로 시도했을 때 실제 사례를 놓쳤다. 내가 빠뜨린 예는 우리가 의사 협회 (Association of Physician) – ramdaz

+0

동의어 (Treeych)와 같은 문구를 살펴볼 필요가 있다는 것입니다. Named Entity Recognition에는 NLTK (http://www.nltk.org/)와 같은 NLP 라이브러리를 사용해야합니다. –

2

"다시"접근법은 매우 빨리 증기가 고갈됩니다. 명명 된 엔티티 인식은 SO 응답 범위를 넘어서는 매우 복잡한 주제입니다. 이 문제에 대한 좋은 접근 방법이 있다고 생각한다면 Flann O'Brien 일명 Myles na cGopaleen, Sukarno, Harry S. Truman, J. Edgar Hoover, JK Rowling, 수학자 L' Hopital, Joe di Maggio, Algernon Douglas-Montagu-Scott, Köfering und Schönberg의 Hugo Max Graf von und zu Lerchenfeld 등이있다.

업데이트 다음은 유효한 사례를 많이 찾는 "다시"기반 접근 방식입니다. 그래도 여전히 좋은 접근 방식이라고 생각하지 않습니다. N.B. 필자는 텍스트 샘플에서 바이에른 카운트의 이름을 높이 평가했습니다. 누구나 정말 이런 식으로 사용하고 싶다면, 유니 코드로 작업하고, 어떤 단계 (입력 또는 출력 중 하나)에서 공백을 표준화해야합니다.

import re 

text1 = """Conan Doyle said that the character of Holmes was inspired by Dr. Joseph Bell, for whom Doyle had worked as a clerk at the Edinburgh Royal Infirmary. Like Holmes, Bell was noted for drawing large conclusions from the smallest observations.[1] Michael Harrison argued in a 1971 article in Ellery Queen's Mystery Magazine that the character was inspired by Wendell Scherer, a "consulting detective" in a murder case that allegedly received a great deal of newspaper attention in England in 1882.""" 

text2 = """Flann O'Brien a.k.a. Myles na cGopaleen, I Zingari, Sukarno and Suharto, Harry S. Truman, J. Edgar Hoover, J. K. Rowling, the mathematician L'Hopital, Joe di Maggio, Algernon Douglas-Montagu-Scott, and Hugo Max Graf von und zu Lerchenfeld auf Koefering und Schoenberg.""" 

pattern1 = r"(?:[A-Z][a-z]+[. ]+)+(?:[A-Z][a-z]+)?" 

joiners = r"' - de la du von und zu auf van der na di il el bin binte abu etcetera".split() 

pattern2 = r"""(?x) 
    (?: 
     (?:[ .]|\b%s\b)* 
     (?:\b[a-z]*[A-Z][a-z]*\b)? 
    )+ 
    """ % r'\b|\b'.join(joiners) 

def get_names(pattern, text): 
    for m in re.finditer(pattern, text): 
     s = m.group(0).strip(" .'-") 
     if s: 
      yield s 

for t in (text1, text2): 
    print "*** text: ", t[:20], "..." 
    print "=== Ned B" 
    for s in re.finditer(pattern1): 
     print repr(s.group(0)) 
    print "=== John M ==" 
    for name in get_names(pattern2, t): 
     print repr(name) 

출력 :

C:\junk\so>\python26\python extract_names.py 
*** text: Conan Doyle said tha ... 
=== Ned B 
'Conan Doyle ' 
'Holmes ' 
'Dr. Joseph Bell' 
'Doyle ' 
'Edinburgh Royal Infirmary. Like Holmes' 
'Bell ' 
'Michael Harrison ' 
'Ellery Queen' 
'Mystery Magazine ' 
'Wendell Scherer' 
'England ' 
=== John M == 
'Conan Doyle' 
'Holmes' 
'Dr. Joseph Bell' 
'Doyle' 
'Edinburgh Royal Infirmary. Like Holmes' 
'Bell' 
'Michael Harrison' 
'Ellery Queen' 
'Mystery Magazine' 
'Wendell Scherer' 
'England' 
*** text: Flann O'Brien a.k.a. ... 
=== Ned B 
'Flann ' 
'Brien ' 
'Myles ' 
'Sukarno ' 
'Harry ' 
'Edgar Hoover' 
'Joe ' 
'Algernon Douglas' 
'Hugo Max Graf ' 
'Lerchenfeld ' 
'Koefering ' 
'Schoenberg.' 
=== John M == 
"Flann O'Brien" 
'Myles na cGopaleen' 
'I Zingari' 
'Sukarno' 
'Suharto' 
'Harry S. Truman' 
'J. Edgar Hoover' 
'J. K. Rowling' 
"L'Hopital" 
'Joe di Maggio' 
'Algernon Douglas-Montagu-Scott' 
'Hugo Max Graf von und zu Lerchenfeld auf Koefering und Schoenberg' 
관련 문제