Python文件中的单词更改

时间:2014-11-20 18:00:30

标签: python list replace split

我试图将文本中的名词改为“名词”。 我遇到了麻烦。这是我到目前为止所拥有的。

def noun(file):
    for word in file:
        for ch in word:
            if ch[-1:-3] == "ion" or ch[-1:-3] == "ism" or ch[-1:-3] == "ity":
                word = "noun"
        if file(word-1) == "the" and (file(word+1)=="of" or file(word+1) == "on" 
            word = "noun"
          #  words that appear after the 
        return outfile 

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你的切片是空的:

>>> 'somethingion'[-1:-3]
''

因为端点位于开始之前。你可以在这里使用[-3:]

>>> 'somethingion'[-3:]
'ion'

但您最好使用str.endswith()代替:

ch.endswith(("ion", "ism", "ity"))

如果字符串以3个给定字符串中的任何一个结尾,则该函数将返回True

ch实际上不是一个词;如果word是一个字符串,那么for ch in word将遍历单个字符,并且这些字符永远不会以3个字符的字符串结尾,只有一个字符长。

你试图查看下一个和前一个词也会失败;您不能将列表或文件对象用作可调用对象,更不用说将file(word - 1)用作有意义的表达式(字符串- 1失败,以及file(...))。

您可以在此处使用正则表达式,而不是循环使用'',

import re

nouns = re.compile(r'(?<=\bthe\b)(\s*\w+(?:ion|ism|ity)\s*)(?=\b(?:of|on)\b)')

some_text = nouns.sub(' noun ', some_text)

这会查找以三个子字符串结尾的单词,但前面只有the后跟ofon并替换为noun的字词。

演示:

>>> import re
>>> nouns = re.compile(r'(?<=\bthe\b)(\s*\w+(?:ion|ism|ity)\s*)(?=\b(?:of|on)\b)')
>>> nouns.sub(' noun ', 'the scion on the prism of doom')
'the noun on the noun of doom'