2017-10-02 13 views
1

Pythonにはかなり新しい(そしてStack Overflow!)ここに。件名データ(テキスト文字列)を持つデータセットがあり、これは単語モデルのバッグを作成するために取り組んでいます。さまざまなシナリオで0または1のフラグを立てる新しい変数を作成していますが、テキストに省略記号( "...")がある場所を特定しようとしています。 (「...」)を入力テキスト文字列Pythonで楕円を見つけるには?

Data_Frame['Elipses'] = Data_Frame.Subject_Line.str.match('(\w+)\.{2,}(.+)') 

明白な理由のために動作しませんが、上記の正規表現のコードが示唆された - それでも動作しない:ここで私から始めているところです。これも試しました:

Data_Frame['Elipses'] = Data_Frame.Subject_Line.str.match('.\.\.\') 

サイコロがありません。

上記のコードシェルは、私が作成した他の変数でも動作しますが、True/Falseではなく0-1の出力を作成する際に問題があります(Rのas.numeric引数になります)。ここで助けていただければ幸いです。

ありがとうございます!

+1

あなたを与える
import re for test in ["hello..", "again... this", "is......a test", "...def"]: ellipses = re.search(r'(\w+)\.{3,}', test) if ellipses: print ellipses.group(1) 

を)。あなたはSubject_Lineの例を挙げることができますか? –

+2

エスケープ文字が間違っているようです。バックスラッシュはその前に来るべきです。 – davidmneedham

+0

サンプルの件名は次のとおりです。 「、psst ...新しい_product名の時間」 – foosgold

答えて

1

match()の代わりにsearch()を使用すると、テキストの任意のポイントに楕円が現れます。 0または1が返される必要がある場合は、boolに変換してからintに変換します。

import re 

for test in ["hello..", "again... this", "is......a test", "...def"]: 
    print int(bool(re.search(r'(\w+)\.{3,}', test))) 

これは真ん中の2つのテストに一致する:

0 
1 
1 
0 

は、Pythonのドキュメントで良い説明のためsearch-vs-matchを見てみましょう。


マッチングの言葉を表示するには:それはちょうど3ピリオド( `...`)または適切な省略記号( `...`である

again 
is 
+0

これははるかに近いと思われます。 'Data_Frame ['Ellipsis'] = re.search(r '(\ w +)\。{3、}'、str(Data_Frame.Subject_Line))' 私はあなたの答えから順応したコードです。この場合は何らかの理由でデータセットを文字列に変換しますが、それはすでに文字列です。ただし、出力はCSV出力のすべてのデータインスタンスで出力されます。 '<_sre.SRE_Matchオブジェクト; span =(280、284)、match = 's ...'> ' これは一致する(検索する)ようですが、すべてのインスタンスで一致するものを検索します。これは正しいか?また、出力を0/1にする方法もありますか? – foosgold

+0

ソーステキストを見ずに言うのは難しいです。線の長さは意味がありますか?例えば'print len(str(Data_Frame.Subject_Line)))'? 'bool()'と 'int()'に変換すると '0'または' 1'が返されます。 –

関連する問題