我有一个分析圣经经文文本的程序。我有一个词典,因为简洁,我将以此为例:
{
"song": ["Song of Songs", "Song of Solomon"],
"exod": ["Bilowgii", "Zanafilla", "1 Moseboken","Exodus", "2 Mosebog", "2 Mose", "Shemot", "2 Mooseksen", "Exode", "Esodo"]
}
此外,我还有一个消息的标记化列表,如果消息中有一本书,我必须寻找该消息(另一个例子)。
`["my", "favorite", "verse", "is", "Song", "of", "Solomon", "1:2", "but", "my", "second", "favorite", "is", "Exodus", "2:15"]
当然,我现在可以遍历两首"歌曲"和" exod"并且没有问题地找出Exodus,因为它不是具有多个单词的书名。但是,我怎样才能发现所罗门之歌是什么?#34;是基于标记化字符串的dict中的一个项目?
如果无法找到针对此特定方法的解决方案,我是否可以通过这种方式简化流程?
注意:我正试图找到一种方法来重建字符串"查看这样的字符串是否在列表中。换句话说,如果重建的字符串在这样的列表中,我希望能够知道列表的键是什么。 (即我应该得到#34;歌曲"来自["我的#34;,"最喜欢的","诗歌","是" ,"歌曲","","所罗门"," 1:2"])
我的解决方案是不再对字符串进行标记,并将字符串与@ ezod的答案结合使用。
答案 0 :(得分:1)
所以,找到你在字典上迭代的所有歌曲并累积结果:
def find_verses(book_dict, target_sentence):
result = []
for key, verse_list in book_dict.items():
for verse in verse_list:
if verse in target_sentence:
result.append((key, verse))
return result
编辑2:删除令牌列表中的令牌搜索,因为我们会松开短语。
编辑3:添加代码以查找所有经文
答案 1 :(得分:1)
您正在尝试检查列表是否是另一个列表的子列表。您可以检查较大列表的不同部分,并将其与标记化查询字符串进行比较。
query = ["Song", "of", "Salomon"]
text = ["my", "favorite", "verse", "is", "Song", "of", "Solomon", "1:2", "but", "my", "second", "favorite", "is", "Exodus", "2:15"]
is_sublist = any((query == text[i:i+len(query)] for i in range(0, len(text) - len(query))))
# is_sublist will be True