Python中基于查询的文档摘要的模糊逻辑

时间:2017-07-17 18:02:54

标签: logic fuzzy-logic expert-system pyke

我正在尝试使用模糊逻辑来加权并提取查询的最佳句子。我已经提取了以下可以在模糊逻辑中使用的功能:

  • 每个句子都有余弦值。
  • 句子中有多少专有名词。
  • 文件中句子的位置。
  • 句子长度。

我想使用上述功能来应用模糊逻辑。例如,我想创建规则库,如下所示

  

如果cosineValue> = 0.9&& numberOfPropernoun> = 1   那句话很重要

我不太确定如何开始实现规则库,事实和推理引擎。它希望有人指导我在python中实现它。请注意,我不熟悉逻辑编程语言。我想在python中实现它

1 个答案:

答案 0 :(得分:0)

这只是一幅草图;我甚至不打算尝试这段代码,因为我不确定你想要什么。

为您的功能制作课程:

Features = namedtuple('Features', ['cosine', 'nouns', 'position', ...])

现在假设您正在构建AST。你的语言有什么语法?好吧,你有条件,你的条件有后果,你的条件可以由布尔运算符组合,所以让我们做一些基本的:

class CosineValue(object):
  def evaluate(self, features):
    return features.cosine

class Nouns(object):
  def evaluate(self, features):
    return features.nouns

... etc.

现在您需要将这些AST节点与某些操作结合起来

class GreaterThan(object):
  def __init__(self, property, value):
    self.property, self.value = property, value

  def evaluate(self, sentence):
    return property.evaluate(sentence) > self.value

现在GreaterThan(CosineValue(), 0.9)是一个对象(实际上是一个抽象语法树),代表cosineValue > 0.9。您可以这样评估:

expr = GreaterThan(CosineValue(), 0.9)
expr.evaluate(Features(cosine=0.95, ...))  # returns True
expr.evaluate(Features(cosine=0.40, ...))  # returns False

这些对象看起来不多,但他们正在做的是 reifying 您的流程。他们的结构编码以前的代码。考虑一下,因为这是你要做的事情中唯一困难的部分:理解如何通过将计算结构转换为延迟计算,以及如何在时使用 em>值成为您计算的一部分。你可能会考虑如何写那些"如果"语句并将它们与运行它们所需的代码和运行时值分开。现在你应该能够看到它,但它是一种更先进的编程方式。

现在你需要建立你的if / then结构。我不确定你想要什么,但是我会说你的if / then会成为一个类似于我们只是创建为一个参数和一个"然后&#34的表达式;案例,并进行测试,并执行或不执行"然后"案件。可能你需要if / then / else,或者一种方法来跟踪它是否被触发,或者一种方法来评估你的if值。你将不得不考虑这一部分;没有人可以根据你上面写的内容告诉你你应该做什么。

为了使你的条件更强大,你需要为条件作为参数的布尔运算符添加更多的类,但它应该是直截了当的;如果您有AndOr,他们都会收到两个Condition个参数,他们的评估会做出明智的决定。您可以创建一个Condition超类,然后添加一些方法,如AndOr,以简化生成这些结构。

最后,如果你想要解析上面的内容,你应该尝试pyparsing,但要确保你首先找到AST,否则这将是一场艰苦的战斗。或者看看他们有什么;也许他们有一些原始的东西,我很长时间没有处理过pyparsing。

祝你好运,请下次再问一个更好的问题!