2016-12-19 9 views
2

私はテキストファイルから句読点のリストを削除しようとしていますが、ハイフンから区切られた単語には問題が1つしかありません。たとえば、「外傷後」という言葉がある場合、私は「ポストトラマ」を取得し、逆に「ポスト」「トラウマ」を得たいと考えています。Pythonはテキストファイルから句読点を削除します

私のコードは次のとおりです。

punct=['!', '#', '"', '%', '$', '&', ')', '(', '+', '*', '-'] 

with open(myFile, "r") as f: 
     text= f.read() 
     remove = '|'.join(REMOVE_LIST) #list of word to remove 
     regex = re.compile(r'('+remove+r')', flags=re.IGNORECASE) 
     out = regex.sub("", text) 

     delta= " ".join(out.split()) 
     txt = "".join(c for c in delta if c not in punct) 

は、それを解決する方法はありますか?

+0

[a-zA-Z]。* - [az]を削除しない正規表現を使用する必要があります – kulssaka

+0

試しに試してみてください。= regex.sub( ""、text )? – tnknepp

答えて

3

私はあなたの最後の行は次のようになるので、あなただけの、デルタに内蔵されたreplace関数を呼び出すことができると信じて:

txt = "".join(c for c in delta.replace("-", " ") if c not in punct) 

これは、テキスト内のすべてのハイフンはスペース、とても言葉になることを意味しますあたかも別々のものとして扱われます。

+0

ありがとうアンドリュー! – CosimoCD

0

最初の文字列からすべてのダッシュ( " - ")文字を削除するため、上記の方法が機能しないことがあります。それを機能させたい場合は、リストpunctから削除してください。更新されたコードは次のようになります。

punct=['!', '#', '"', '%', '$', '&', ')', '(', '+', '*'] 

with open(myFile, "r") as f: 
     text= f.read() 
     remove = '|'.join(REMOVE_LIST) #list of word to remove 
     regex = re.compile(r'('+remove+r')', flags=re.IGNORECASE) 
     out = regex.sub("", text) 

     delta= " ".join(out.split()) 
     txt = "".join(c for c in delta.replace("-", " ") if c not in punct) 

問題あなたは空の文字列でPUNCT内のすべての文字を置換している、とあなたがのためのスペースたいということから来ている「 - 」を。したがって、文字を2回置き換える必要があります(空の文字列で1回、スペースで1回)。

関連する問題