我想从此字符串中删除多余的 r 和 n。我尝试了正则表达式。不确定正则表达式或其他方法在这里是否有帮助。
这是我尝试使用 import re 的代码
text = "r n r n r nFamily Medical History new r n r n r r r Roger nRobert n nDawson n49 nyears old , right shoulder"
regex_pattern = re.compile(r'\s[rn]\s')
matches = regex_pattern.findall(text)
for match in matches:
text = text.replace(match," ")
print(text)
当前输出:
r nFamily Medical History new Roger nRobert nDawson n49 nyears old , right shoulder
我们仍然看到很多r n。还想知道如何从 n49、nyears 中删除“n”并从 Dawson 中删除第一个“n”而不删除最后一个“n”
预期输出:
Family Medical History new Roger Robert Dawson 49 years old , right shoulder
最佳答案
我建议在这里使用一些 NLP 方法,因为我不明白正则表达式如何告诉 nyears
(拼写错误)来自new
(正确拼写)。
首先,删除所有独立的 r
/n
以及那些粘在大写单词和数字上的单词,然后拆分字符串并检查以 n
开头的每个单词。或r
使用拼写检查器。第一个n
如果 word[1:]
则可以删除是正确的并且 word
不是。如果两者都不正确,我认为回退到 word
是安全的。 .
例如,要运行拼写检查,您可以使用 TextBlob
.
这是一个Python代码演示:
from textblob import TextBlob
from textblob import Word
import re
s = "r n r n r nFamily Medical History new r n r n r r r Roger nRobert n nDawson n49 nyears old , right shoulder"
s = re.sub(r'\b[rn](?=[A-Z0-9\s]|$)', '', s)
result = []
for w in s.split():
if not w.startswith(('n','r')): # The w word does not start with n or r...
result.append(w) # Add it to the result
else:
if Word(w).correct() == w: # If w is a correct word
result.append(w) # Add it to the result
else:
if Word(w[1:]).correct() == w[1:]: # If w[1:] is correct
result.append(w[1:]) # Add w[1:] to the result
else:
result.append(w) # Fallback: add w to the result
print(" ".join(result))
# => Family Medical History new Roger Robert Dawson 49 years old , right shoulder
re.sub(r'\b[rn](?=[A-Z0-9\s]|$)', '', s)
部分删除 r
和n
如果紧跟大写字母、数字或字符串结尾,则位于单词开头。
然后,for w in s.split():
迭代句子中的单词并仅替换以 n
开头的单词或r
并且有拼写错误 w[1:]
.
免责声明:TextBlob
被用作示例。您可以自由使用任何其他拼写检查库。 TextBlob spellchecking “基于 Peter Norvig 的“如何编写拼写校正器”1,并在模式库中实现。准确率约为 70%”
关于python - 从字符串中删除 r n r n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65850416/