例子:
1. names = ['James John', 'Robert David', 'Paul' ... the list has 5K items]
2.
3. text1 = 'I saw James today'
4. text2 = 'I saw James John today'
5. text3 = 'I met Paul'
6.
7. is_name_in_text(text1,names) # this returns false 'James' in not in list
8. is_name_in_text(text2,names) # this returns 'James John'
9. is_name_in_text(text3,names) # this return 'Paul'
Run Code Online (Sandbox Code Playgroud)
is_name_in_text () 搜索是否有任何名称列表在文本中。
最简单的方法是使用“ in”运算符检查名称是否在列表中,但列表有5,000个项目,因此效率不高。我可以将文本分成单词并检查单词是否in是列表,但是如果您有多个单词匹配,这将不起作用。在这种情况下,第 7 行将失败。
将名称放入一个集合中并使用 in-operator 进行快速 O(1) 查找。
您可以使用正则表达式来解析句子中可能的名称:
>>> import re
>>> findnames = re.compile(r'([A-Z]\w*(?:\s[A-Z]\w*)?)')
>>> def is_name_in_text(text, names):
for possible_name in set(findnames.findall(text)):
if possible_name in names:
return possible_name
return False
>>> names = set(['James John', 'Robert David', 'Paul'])
>>> is_name_in_text('I saw James today', names)
False
>>> is_name_in_text('I saw James John today', names)
'James John'
>>> is_name_in_text('I met Paul', names)
'Paul'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8442 次 |
| 最近记录: |