查看文本中是否有任何术语

时间:2018-07-12 00:11:06

标签: python

我有一些文字,我想看看其中是否有与“软件相关”的术语。这是一个基本的实现:

def is_software_related(text):
    TERMS = ['software', 'developer', 'java', 'ruby', 'python']
    for term in TERMS:
        if term in text.lower(): return True
    return False

是否有一种更优雅的单层衬纸来做上述事情?

3 个答案:

答案 0 :(得分:2)

生成器:

还有其他一些生成器解决方案,但这可能是最容易阅读的:

def is_software_related(text):
    return any(term in text.lower() for term in ['software', 'developer', 'java', 'ruby', 'python'])

设置交叉点:

如果您只想匹配完整的单词,则可以设置一个交集(在文本中创建一组与软件相关的单词和另一组单词,并查看它们是否共享任何成员):

def is_software_related(text):
    return bool({'software', 'developer', 'java', 'ruby', 'python'} & set(text.lower().split()))

尽管可以说,这比仅使用for循环更不易读,而且绝对不比生成器更易读。请注意,它产生的行为与使用in的解决方案不同(因为in将允许部分匹配,例如javanese,而集合交集则不允许)。对于您的用例,这可能是更好的行为。

答案 1 :(得分:1)

您编写的内容可以用以下一句话来写:

def is_software_related(text):
    return any(map(text.lower().__contains__, ('software', 'developer', 'java', 'ruby', 'python')))

答案 2 :(得分:1)

您可以使用any在一行中完成该操作。

any(map(lambda x: x in text.lower(), TERMS))