「haaaaapppppyyy」のようなものを「haappyy」に変換する最良の方法は何だろうと思っていました。
基本的に、スラングを解析するとき、強調のために文字を繰り返すことがあります。
これを行う最善の方法は何ですか?set()
文字の順序は明らかに重要であるため、使用は機能しません。
何か案は?Python + nltk を使用しています。
正規表現を使用して実行できます。
>>> import re
>>> re.sub(r'(.)\1+', r'\1\1', "haaaaapppppyyy")
'haappyy'
(.)\1+
任意の文字(.
)の後に1つ以上の同じ文字(backref\1
は同じである必要があるため)が続く場合は、2倍の文字を補充します。
次のようにして、複数回出現する文字を押しつぶすことができますitertools.groupby
。
>>> ''.join(c for c, _ in groupby("haaaaapppppyyy"))
'hapy'
同様に、haappyy
から取得できますgroupby
>>> ''.join(''.join(s)[:2] for _, s in groupby("haaaaapppppyyy"))
'haappyy'
これはそれを行う 1 つの方法です (Python が英語を話さないという明らかな制約に限定されます)。
>>> s="haaaappppyy"
>>> reduce(lambda x,y: x+y if x[-2:]!=y*2 else x, s, "")
'haappyy'