【发布时间】:2018-11-19 12:33:46
【问题描述】:
我正在对单词列表执行以下操作。我从 Project Gutenberg 文本文件中读取行,用空格分隔每一行,执行一般的标点符号替换,然后将每个单词和标点符号标签打印在其自己的行上以供以后进一步处理。我不确定如何用标签替换每个单引号或将所有撇号除外。我目前的方法是使用编译的正则表达式:
apo = re.compile("[A-Za-z]'[A-Za-z]")
并执行以下操作:
if "'" in word and !apo.search(word):
word = word.replace("'","\n<singlequote>")
但这忽略了在带有撇号的单词周围使用单引号的情况。它也没有向我表明单引号是紧靠单词的开头还是单词的结尾。
示例输入:
don't
'George
ma'am
end.'
didn't.'
'Won't
示例输出(处理并打印到文件后):
don't
<opensingle>
George
ma'am
end
<period>
<closesingle>
didn't
<period>
<closesingle>
<opensingle>
Won't
关于这个任务我还有一个问题:既然区分<opensingle> 和<closesingle> 似乎相当困难,那么执行类似的替换是否更明智
word = word.replace('.','\n<period>')
word = word.replace(',','\n<comma>')
在执行替换操作之后?
【问题讨论】:
-
你如何定义一个词?
-
它只是一个数组中的字符串,由 words = line.split() 产生。当我打印到文件时,我只是在空格上分割一行并使用 \n 字符将标点符号剥离到新行上的标签中。但我不想去掉撇号,因为我认为从字面意义上来说,缩略词是可以适当定义的“词”。
-
另一种情况(我忘了提)是连字符:我不想分解连字符。
标签: python regex substitution single-quotes