我试图将文本中的名词改为“名词”。 我遇到了麻烦。这是我到目前为止所拥有的。
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
有什么想法吗?
答案 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
后跟of
或on
并替换为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'