【问题标题】:Replace only whole words using a dictionary (file)使用字典(文件)仅替换整个单词
【发布时间】:2022-09-23 20:25:24
【问题描述】:

我对python很陌生,所以如果这真的很明显,请原谅我。我想用基于字典(或字典文件)的替代词替换文件中的所有单词。我已经阅读了许多其他帖子,并且此代码(如下)运行良好。但是,它也会替换子字符串。


text = \"strings.txt\"
fields = {\"Cat\": \"Hello\", \"Hat\": \"Goodbye\"}


for line in fileinput.input(text, inplace=True):
    line = line.rstrip()
    if not line:
        continue
    for f_key, f_value in fields.items():
        if f_key in line:
            line = line.replace(f_key, f_value)
    print (line)

因此,卡特彼勒将成为 Helloerpillar,而仇恨者将成为 Goodbyemonger。我希望单独留下子字符串,因此只会替换完整的单词。谁能建议我如何做到这一点?

另外....这不太重要,但我也尝试让脚本从单独的文件中读取字典。这不是那么重要,但如果有它会很好。

我试图通过以下方式修改脚本,但没有运气。

    import json
  
with open(\'dictionary.txt\') as f:
    data = f.read()

text = \"strings.txt\"
fields = data

for line in fileinput.input(text, inplace=True):
    line = line.rstrip()
    if not line:
        continue
    for f_key, f_value in fields.items():
        if f_key in line:
            line = line.replace(f_key, f_value)
    print (line)

您可以就这些问题(尤其是第一个问题)提供的任何建议将不胜感激。

谢谢

    标签: python dictionary


    【解决方案1】:

    你可以做:

    fields = {"Cat": "Hello", "Hat": "Goodbye"}
    s = "This Is A Catterpilar Chatting With A Cat"
    
    
    s =   ' '.join([fields[w] if w in fields else w for w in s.split(' ')])
    

    输出:

    'This Is A Catterpilar Chatting With A Hello'
    

    该行所做的是将句子拆分为单词,如果每个单词在 fields dict 中,则将其替换为等价词,否则保持原样,然后将所有单词连接成一个新句子。

    为简单起见,所有单词都以大写字母开头,但您可以在第二步轻松处理。

    【讨论】:

    • 嘿!谢谢你这么快回答。我要替换的文本是一个包含许多单词和方程式的大型文档,这个解决方案可以解决这个问题吗?刚试了一下,发现很难。
    • 这里没有做太多处理,所以应该没问题!大约多少字?
    猜你喜欢
    • 2018-06-09
    • 2017-08-25
    • 2019-10-04
    • 2021-12-10
    • 2017-12-28
    • 2014-10-13
    • 2015-07-12
    • 2020-01-06
    • 1970-01-01
    相关资源
    最近更新 更多