Python:通过字典比较两个同义词

Bru*_*ris 2 python dictionary

我有一个同义词词典:

synonym = {"this": ["this", "same"],
           "all": ["all", "any", "*"],
           "alluptolastyear": ["alluptolastyear", "uptolastyear"],
           "dekadbefore": ["dekadbefore", "lastdekad", "formerdekad", "precedingdekad"],
           "dekadafter": ["dekadafter", "nextdekad", "followingdekad"],
           "yearbefore": ["yearbefore", "lastyear", "formeryear"],
           "monthbefore": ["monthbefore", "lastmonth", "precedingmonth"]}
Run Code Online (Sandbox Code Playgroud)

每个数组都存储通过键引用的同义词.我从XML文件中读取了两个字符串,并尝试比较它们.

例如:

  • "this"并且"same"是相等的(同义词)
  • '"lastyear"'和'"formeryear"'相等(同义词)
  • "all"并且"nextdekad"是不同的
  • 当然,每个键值都在其相应的数组中找到,因此每个键都是其数组字符串的同义词.

有人可以帮助我使用同义词词典对这些字符串进行pythonic比较吗?

Mar*_*cus 6

试试这个:

def are_sinonims(a, b):
    return a in synonym.get(b,[]) or b in synonym.get(a,[]) or any(a in synonym[k] and b in synonym[k] for k in synonym)
Run Code Online (Sandbox Code Playgroud)

此外,我们可以重写部分a in synonym[k] and b in synonym[k] for k in synonym,以a in words and b in words for words in synonym.values()使得:

def are_sinonims(a, b):
    return a in synonym.get(b,[]) \
           or b in synonym.get(a,[]) \
           or any(a in words and b in words for words in synonym.values())
Run Code Online (Sandbox Code Playgroud)