gpt4 book ai didi

python - 如何重新使用下面的解决方案获得精确的单词匹配来转换单词?

转载 作者:太空宇宙 更新时间:2023-11-03 14:11:03 25 4
gpt4 key购买 nike

以下解决方案在 Stack Overflow 上提供:expanding-english-language-contractions-in-python

它对于宫缩非常有效。我尝试扩展它来处理俚语,但遇到了下面的问题。另外,我更愿意使用 1 种解决方案来处理所有单词转换(例如:扩展、俚语等)

我扩展了 Contracts_dict 来更正俚语,请参阅下面的第三个条目:

contractions_dict = {
"didn't": "did not",
"don't": "do not",
"ur": "you are"
}

但是,当我对包含俚语(ur)(例如“惊喜”)的单词执行此操作时,我得到了

“你很高兴”

上面嵌入的“you”和“are”是“ru”所在的位置。

如何在 Contracts_dict 中的某个键上获得完全匹配

在下面的代码中,我尝试在“替换”函数周围嵌入更精确的单词匹配正则表达式,但收到错误“TypeError:必须是 str,而不是函数”。

代码:

import re

contractions_dict = {
"didn't": "did not",
"don't": "do not",
"ur": "you are"
}

contractions_re = re.compile('(%s)' % '|'.join(contractions_dict.keys()))
def expand_contractions(s, contractions_dict=contractions_dict):
def replace(match):
return contractions_dict[match.group(0)]
return contractions_re.sub(replace, s)

result = expand_contractions("surprise")
print(result)

# The result is "syou areprise".

# ---
# Try to fix it below with a word match regex around the replace function call.

contractions_re = re.compile('(%s)' % '|'.join(contractions_dict.keys()))
def expand_contractions(s, contractions_dict=contractions_dict):
def replace(match):
return contractions_dict[match.group(0)]
return contractions_re.sub(r'(?:\W|^)'+replace+'(?!\w)', s)

# On the line above I get "TypeError: must be str, not function"

result = expand_contractions("surprise")
print(result)

最佳答案

你的问题是 replace 是一个函数的名称,而你试图将它连接到一个字符串,这就是为什么这个

return contractions_re.sub(r'(?:\W|^)'+replace+'(?!\w)', s)

正在向您提供您报告的错误。当您调用 sub() 时,您可以提供替换字符串,要调用的函数名称,但不能组合使用这两种方法都是您尝试做的方式。

我会回到您提供 sub() 函数的原始方法。我认为您缺少的是特殊的正则表达式序列 \b。它匹配空字符串,但仅在单词边界处匹配。像这样:

contractions_re = re.compile("|".join(r'(\b%s\b)' % c for c in contractions_dict.keys()))

这给出了以下重新模式:

r"(\bdidn't\b)|(\bdon't\b)|(\bur\b)"

这将避免令人讨厌的syou areprise。请注意 r'...' 字符串符号。您需要它,这样反斜杠就不会绊倒您。

这适用于字符串中的多个标记,因为它应该:

>>> expand_contractions("didn't that surprise you")
'did not that surprise you'

但这样做也显示了缩写词逐词替换的局限性。开始一个问题不是非常19世纪的(事实上,他们可能会说不是,即使他们写>没有那样)。现在的英语是这样的:你不感到惊讶吗

关于python - 如何重新使用下面的解决方案获得精确的单词匹配来转换单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48492129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com