gpt4 book ai didi

python - 检测就职演说语言中的典故(例如非常模糊的匹配)

转载 作者:太空狗 更新时间:2023-10-30 00:15:05 24 4
gpt4 key购买 nike

我正在尝试开发一个 Python 脚本来检查巴拉克奥巴马第二次就职演说中的每一句话,并在过去的就职演说中找到类似的句子。我开发了一个非常粗糙的模糊匹配,我希望改进它。

我首先将所有就职典礼简化为无停用词的句子列表。然后我建立一个频率索引。

接下来,我将奥巴马 2013 年演讲中的每个句子与所有其他演讲中的每个句子进行比较,并像这样评估相似度:

#compare two lemmatized sentences. Assumes stop words already removed. frequencies is dict of frequencies across all inaugural    
def compare(sentA, sentB, frequencies):
intersect = [x for x in sentA if x in sentB]
N = [frequencies[x] for x in intersect]
#calculate sum that weights uncommon words based on frequency inaugurals
n = sum([10.0 / (x + 1) for x in N])
#ratio of matches to total words in both sentences. (John Adams and William Harrison both favored loooooong sentences that tend to produce matches by sheer probability.)
c = float(len(intersect)) / (len(sentA) + len(sentB))
return (intersect, N, n, c)

最后,我根据 n 和 c 的任意截止值筛选出结果。

它的效果比人们想象的要好,它可以识别出在总单词中所占比例不可忽略的共享不常见单词的句子。

例如,它选择了这些匹配项:


奥巴马,2013 年:因为历史告诉我们,虽然这些真理可能是不言而喻的,但它们从来都不是自动执行的;虽然自由是上帝的礼物,但必须由他在地球上的子民保护。

肯尼迪,1961 年:良心是我们唯一可靠的奖赏,历史是我们行为的最终评判者,让我们前去领导我们所爱的土地,祈求他的祝福和帮助,但要知道上帝在地球上的工作必须真正属于我们自己。


奥巴马,2013 年通过鞭笞流血和刀剑流血,我们了解到,任何建立在自由和平等原则之上的联盟都不可能在半奴役和半自由的状态下生存。

林肯,1861 年然而,如果上帝愿意,它会继续下去,直到奴隶们 250 年的无偿辛劳所积累的所有财富都被消耗殆尽,直到用鞭子抽出的每一滴血都由另一个用剑抽出的血来偿还,就像过去一样三千年前就说了,现在还得说“耶和华的判断是真实的,全然公义。”


奥巴马,2013 年这一代美国人经受了危机的考验,这些危机坚定了我们的决心并证明了我们的韧性

肯尼迪,1961 年自从这个国家成立以来,每一代美国人都被召唤来见证其对国家的忠诚。


但它很粗糙。

我没有大型机器学习项目的能力,但如果可能的话,我确实想应用更多的理论。我了解双字母搜索,但我不确定它在这里是否有效——我们感兴趣的不是精确的双字母,而是引号之间共享的两个词的一般接近度。有没有看单词概率和分布又不死板的模糊句比较?典故的本质是它非常近似。

当前工作 available on Cloud9IDE

更新,1/24/13根据接受的答案,这里有一个用于二元组窗口的简单 Python 函数:

def bigrams(tokens, blur=1):
grams = []
for c in range(len(tokens) - 1):
for i in range(c + 1, min(c + blur + 1, len(tokens))):
grams.append((tokens[c], tokens[i]))
return grams

最佳答案

如果您受到使用二元语法的启发,您可以构建二元语法,同时允许一个、两个甚至三个单词的间隔,以便稍微放宽二元语法的定义。这可能有效,因为允许 n 间隙意味着甚至没有 n 倍的“二元组”,而且您的语料库非常小。例如,第一段中的“二元组”可以是 (similar, inaugurals)

关于python - 检测就职演说语言中的典故(例如非常模糊的匹配),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14491340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com