3

'th'で終わる初期近代英語の単語である文字列のリストがあります。これらには、hath、appointeth、requestethなどが含まれます。これらはすべて、3人称単数のために結合されています。

はるかに大きなプロジェクトの一環として(私のコンピューターを使用して、ガルガンチュアとパンタグルエルのグーテンベルクのテキストを20世紀の英語のようなものに変換し、より読みやすくします)最後の2つまたは3つを削除したいと思いますこれらすべての単語の文字を「s」に置き換えてから、まだ近代化されていない単語に対してわずかに変更された関数を使用します。どちらも以下に含まれています。

私の主な問題は、Pythonで正しく入力することができなかったことです。この時点で、言語のその部分は本当に混乱していると思います。

これを削除する関数は次のとおりです。

from __future__ import division
import nltk, re, pprint

def ethrema(word):
    if word.endswith('th'):
        return word[:-2] + 's'

無関係なeを削除する関数は次のとおりです。

def ethremb(word):
    if word.endswith('es'):
        return word[:-2] + 's'

したがって、「abateth」と「accuseth」という単語はethremaを通過しますが、ethremb(ethrema)は通過しませんが、「abhorreth」という単語は両方を通過する必要があります。

誰かがこれを行うためのより効率的な方法を考えることができれば、私はすべての耳です。

これは、近代化が必要な単語のトークン化されたリストでこれらの関数を使用しようとした私の非常に素人っぽい試みの結果です。

>>> eth1 = [w.ethrema() for w in text]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'ethrema'

だから、ええ、それは本当にタイピングの問題です。これらは私がPythonで作成した最初の関数であり、実際のオブジェクトに適用する方法がわかりません。

4

1 に答える 1

6

ethrema()タイプのメソッドではないstrため、次を使用する必要があります。

eth1 = [ethrema(w) for w in text]
#AND
eth2 = [ethremb(w) for w in text]

編集(コメントに答えるために):

ethremb(ethrema(word))関数に少し変更を加えるまで機能しません:

def ethrema(word):
    if word.endswith('th'):
        return word[:-2] + 's'
    else
        return word

def ethremb(word):
    if word.endswith('es'):
        return word[:-2] + 's'
    else
        return word

#OR

def ethrema(word):
    if word.endswith('th'):
        return word[:-2] + 's'
    elif word.endswith('es'):
        return word[:-2] + 's'
    else
        return word
于 2010-08-28T17:19:54.963 に答える