2016-04-20 9 views
0

巨大なテキストファイルの単語を数える必要がありますが、その前に特殊なファイルを特定の方法で消去する必要があります。例えばファイル内の単語を数えながら単語の先頭と末尾の特殊文字を削除する

-

;xyz  -->  xyz  
xyz:  -->  xyz   
xyz!)  -->  xyz! 

私は()のスペース上のすべての単語を分割するflatMapを使用しています。そして、私は動作していない特殊文字を削除しようとしています。助けてください!ここで

は---私が使用していたコードである

削除する文字です - ; ! ? ()。

>>> input = sc.textFile("file:///home/<...>/Downloads/file.txt") 
    >>> input2 = input.flatMap(lambda x: x.split()) 
    >>> def remove(x): 
      if x.endsWith(':'): 
       x.replace(':','') 
       return x 
      elif x.endsWith('.'): 
       x.replace('.','') 
       return x 

。 。

 >>> input3 = input2.map(lambda x: remove(x)) 
+2

それが動作しないのはなぜ?あなたが試したものを投稿してください。 –

+0

3番目の例では "!"文字は特殊な文字ではありませんか? – EbraHim

+0

特殊文字とは何ですか? – Saleem

答えて

1

使用re.sub

re.sub(r'(?<!\S)[^\s\w]+|[^\s\w]+(?!\S)', '', f.read()) 

DEMO

0

あなたはfilter()を使用し、その後、文字が有効であるか調べる関数を書くことができます。

def is_valid(char): 
    return char.isalpha() or char in "!,." # Whatever extras you want to include 

new_string = ''.join(filter(is_valid, old_string)) # No need to ''.join() in Python 2 
0

は、正規表現のヘルプを試してみてください:

import re 

with open('input.txt','r') as fp: 
    rx = "[;:\)]+" 
    for line in fp: 
     data = re.sub(rx, "", line.strip()) 
     print(data) 

上記のコードは、ファイルを1行ずつ読み込み、消毒されたコンテンツを表示します。ファイルの内容に応じて、それが印刷されます:[iにするために...
:これはデフ(X)をremovefromstart ME-
のために働いていたコードである

xyz 
xyz 
xyz! 
0

':'、 '!'
... x.startswith(i)の場合:
... token = x.replace(i、 、 '')
... ...トークン
... X
戻る戻る

def removefromend(x): 
...   for i in [':','!','?','.',')','(',';',',']: 
...     if x.endswith(i): 
...       token = x.replace(i,'') 
...       return token 
...   return x 
関連する問題