3

我有一个字符串列表,这些字符串都是以“th”结尾的早期现代英语单词。这些包括hath、annepteth、requireeth 等——它们都变位为第三人称单数。

作为一个更大项目的一部分(使用我的计算机将 Gargantua 和 Pantagruel 的 Gutenberg etext 转换为更像 20 世纪的英语,以便我能够更轻松地阅读它)我想删除最后两个或三个所有这些单词中的字符并将它们替换为“s”,然后对仍然没有现代化的单词使用稍微修改的函数,两者都包括在下面。

我的主要问题是我从来没有设法在 Python 中正确输入。在这一点上,我发现这部分语言真的很混乱。

这是删除 th 的函数:

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 回答