2009-08-27 22 views
1

文章から大文字のフレーズを解析するにはどうすればよいですか?この一節段落の一節または段落から大文字のフレーズを検索する方法

コナン・ドイルから例えば

は、ホームズの文字がドイルはエディンバラロイヤル診療所で事務員として働いていた人のために博士ジョセフ・ベル、触発されたと述べました。 Holmesのように、Bellは最小の観察から大きな結論を引き出すために注目された[1]マイケル・ハリソンは1972年にEllery QueenのMystery Magazineの記事で、このキャラクターは1882年に英国で多くの新聞の注目を集めた殺人事件の「コンサルティング探偵」Wendell Schererに影響を受けたと主張した。

+0

は、あなたが正確に文章ケースのフレーズが何であるかを指定してくださいことはできますか? (単に例を挙げるのではなく、例を挙げても確かに便利です) –

+0

"文例"とは具体的に何を意味していますか? – Triptych

+0

私は、どの単語が大文字の頭文字を持つべきかを判断する方法を知りたいと思っています。 – ChrisW

答えて

5

可能であればコナン・ドイル、ホームズ、博士ジョセフ・ベル、ウェンデルScherrなど

のようなものを生成するために、私はこのような処理は非常にトリッキーなことができPython的ソリューションを好むだろう。

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 

は、あなたが "でできます文字列の期間、とOKする必要があります「博士ジョセフ・ベル」を含めるには、この単純なコードでは、ほぼ正しいことありませんエジンバラ王立保健室。ホームズのように "。

私は同様の問題がありました:Separating Sentences

+2

一般的なケースでは "Like Holmes"エラーを修正するのは実際にはかなり難しい問題です。 OPには、より多くの情報を得るために文章のチャンクと名前付きエンティティの抽出を行い、nltkをチェックしてください。 – Triptych

+0

私はこの解決策を考えましたが、いくつかの偽陽性に陥り、試してみたときに実際のケースを見逃していました。私が逃した例は、医師協会 – ramdaz

+0

トリプティックと合意のようなフレーズを見る必要があるということです。 Named Entity Recognitionには、NLTK(http://www.nltk.org/)のようなNLPライブラリを使用する必要があります。 –

2

「再」アプローチは非常に迅速に蒸気を使い果たします。名前付きエンティティの認識は、SOの答えの範囲を超えて非常に複雑なトピックです。あなたがこの問題に対する良いアプローチをしていると思うなら、Flann O'Brien aka Myles na cGopaleen、Sukarno、Harry S. Truman、J. Edgar Hoover、JK Rowling、数学者L'Hopital、Joe di Maggio、 Algernon Douglas-Montagu-Scott、Hugo Max Graf von und zu Lerchenfeld atKöferingundSchönbergなどがあります。

更新以下は、より多くの有効なケースを見つける「再」ベースのアプローチです。私はまだこれが良いアプローチだとは思わない。 N.B.私はテキストサンプルでバイエルンの数の名前を浮き彫りにしました。誰かが本当にこのようなものを使いたいなら、Unicodeで作業し、ある段階(入力時または出力時)で空白を正規化する必要があります。

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' 
関連する問題