9

「haaaaapppppyyy」のようなものを「haappyy」に変換する最良の方法は何だろうと思っていました。

基本的に、スラングを解析するとき、強調のために文字を繰り返すことがあります。

これを行う最善の方法は何ですか?set()文字の順序は明らかに重要であるため、使用は機能しません。

何か案は?Python + nltk を使用しています。

4

4 に答える 4

32

正規表現を使用して実行できます。

>>> import re
>>> re.sub(r'(.)\1+', r'\1\1', "haaaaapppppyyy")     
'haappyy'

(.)\1+任意の文字(.)の後に1つ以上の同じ文字(backref\1は同じである必要があるため)が続く場合は、2倍の文字を補充します。

于 2012-04-09T11:56:50.863 に答える
8

次のようにして、複数回出現する文字を押しつぶすことができますitertools.groupby

>>> ''.join(c for c, _ in groupby("haaaaapppppyyy"))
'hapy'

同様に、haappyyから取得できますgroupby

>>> ''.join(''.join(s)[:2] for _, s in groupby("haaaaapppppyyy"))
'haappyy'
于 2012-04-09T11:57:45.923 に答える
0

これはそれを行う 1 つの方法です (Python が英語を話さないという明らかな制約に限定されます)。

>>> s="haaaappppyy"
>>> reduce(lambda x,y: x+y if x[-2:]!=y*2 else x, s, "")
'haappyy'
于 2012-04-09T11:54:53.377 に答える