2012-04-03 4 views
0

文字列から最初の文を切り詰めるという問題に苦労しています。 ドットで終わった略語がないと、それほど問題はありません。Pythonでの正規表現の使用

だから私の例は次のとおりです。

  • 文字列=「私はチーズ、車などが、私の最も好きなウェブサイトはstackoverflowのですね。私の新しい馬はランディと呼ばれています。

そして、その結果は次のようになります。

  • 結果は=「私はチーズ、車などが、私の最も好きなウェブサイトはstackoverflowのですね。」

通常、私がどうなる:

re.findall(r'^(\s*.*?\s*)(?:\.|$)', event)

が、上記など

を言及したように、私は、いくつかの事前定義された単語をスキップしたい

私はのカップルとなりましたそれらのどれも働かなかった。

+4

http://stackoverflow.com/a/1732454/203705:ソースコードから

nltk.data.load('tokenizers/punkt/english.pickle') 

:でそれをロードします。 あなたは本当に何をしようとしていますか?あなたが解決しようとしているより大きな問題は何ですか? –

+0

私はいくつかのイベントリファレンスを持つ文字列を持っており、私はこのイベントの略語を作成しています。私が知っているように、基本情報は最初の文章の中にイベントの名前がありますが、時にはインターンのような略語が使われることもあります。 =国際的なものなど、これは本当にお尻に痛みを伴うことがあります。 – skornos

+0

私は最後にTony the Ponyのリンクを投稿しました。[tchrist](http://stackoverflow.com/users/471272/tchrist)は木工から出てきて、私を提出するように言いました。とにかく、制約はありますか、または任意の英語の文章について話していますか?あなたが定義した単語のリスト( 'etc.'を含む)が文の終わりに決して現れない、あるいは文が常に大文字と'の後ろの単語で始まると言うことができるなら、役に立つでしょう。 '決してしない。 – cha0site

答えて

4

あなたは略語は、略語のあなたのアドホックコレクションの代わりにされているかを把握するために、実際のアルゴリズムを使用して、この種のものを行うNLTK's Punkt sentence tokenizerを試みることができます。

NLTKには、英語のために事前にトレーニングされたものが含まれています。自然言語のための二重の真 -

>>> sent_detector = nltk.data.load('tokenizers/punkt/english.pickle') 
>>> print '\n-----\n'.join(sent_detector.tokenize(text.strip())) 
Punkt knows that the periods in Mr. Smith and Johann S. Bach 
do not mark sentence boundaries. 
----- 
And sometimes sentences 
can start with non-capitalized words. 
----- 
i is a good variable 
name. 
+0

+1、このことは素晴らしいです。英語は難しく、正規表現にはあまり適していません。 –

+0

ありがとう、私は実際にNLTKを使用していますが、文の単語を解析するために理想的な解決策のようです。しかし、私は図書館を持っているにもかかわらず、LookupErrorが発生していると思われますので、私はその一部を失っていると思います。 – skornos

+0

@skornosおそらく、[この質問]のように適切なデータファイルがありません。/questions/4867197/failed-loading-english-pickle-with-nltk-data-load)を参照してください。 – Dougal

1

文末の文字の後に最初の大文字を探すのはどうですか?もちろん、絶対にそうではありません。

import re 
r = re.compile("^(.+?[.?!])\s*[A-Z]") 
print r.match('I like cheese, cars, etc. but my the most favorite website is stackoverflow. My new horse is called Randy.').group(1) 

出力

'I like cheese, cars, etc. but my the most favorite website is stackoverflow.'