Logic Python中基于查询的文档摘要的模糊逻辑
我试图使用模糊逻辑来加权和提取查询的最佳句子。我提取了以下可用于模糊逻辑的特征:Logic Python中基于查询的文档摘要的模糊逻辑,logic,fuzzy-logic,expert-system,pyke,Logic,Fuzzy Logic,Expert System,Pyke,我试图使用模糊逻辑来加权和提取查询的最佳句子。我提取了以下可用于模糊逻辑的特征: 每个句子都有余弦值 这个句子中有多少专有名词 句子在文档中的位置 句子长度 我想使用上述特性来应用模糊逻辑。例如,我想创建如下所示的规则库 如果余弦值>=0.9&&numberOfPropernoun>=1 那么这个句子很重要 我不太确定如何开始实现规则库、事实和推理机。希望有人能指导我用python实现这一点。请注意,我不熟悉逻辑编程语言。我想用python实现它这只是一个草图;我甚至不打算尝试这个代码,因为
- 每个句子都有余弦值李>
- 这个句子中有多少专有名词
- 句子在文档中的位置
- 句子长度
我不太确定如何开始实现规则库、事实和推理机。希望有人能指导我用python实现这一点。请注意,我不熟悉逻辑编程语言。我想用python实现它这只是一个草图;我甚至不打算尝试这个代码,因为我不确定你想要什么 为您的功能创建一个类:
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(cosinavalue(),0.9)
是一个对象(实际上是一个抽象语法树),它表示cosinavalue>0.9
。您可以这样评估它:
expr = GreaterThan(CosineValue(), 0.9)
expr.evaluate(Features(cosine=0.95, ...)) # returns True
expr.evaluate(Features(cosine=0.40, ...)) # returns False
这些对象看起来不太像,但它们正在具体化您的过程。它们的结构编码了以前的代码。想想看,因为这是你尝试做的唯一困难的部分:理解如何通过将计算转化为结构来延迟计算,以及当值成为计算的一部分时如何处理。您可能一直在思考如何编写这些“if”语句,并将它们与运行它们所需的代码和运行时值分开。现在,您应该能够了解如何进行编程,但这是一种更高级的编程思维方式
现在需要构建if/then结构。我也不确定你想在这里做什么,但我想说你的if/then将是一个类,它接受一个表达式,就像我们刚刚创建的一个参数和一个“then”案例,并进行测试,执行或不执行“then”案例。可能您需要if/then/else,或者一种跟踪它是否触发的方法,或者一种将if评估为值的方法。你必须考虑这一部分;没有人能根据你上面写的告诉你你应该做什么
为了使您的条件更强大,您需要为布尔运算符添加更多的类,这些布尔运算符将条件作为参数,但这应该很简单;您将有和和或,它们都将接受两个条件
参数,并且它们的计算将做明智的事情。您可以创建一个条件超类,然后添加一些方法,如和和或来简化这些结构的生成
最后,如果您想解析类似于上面所述的内容,您应该尝试一下,但请确保您首先找到了AST,否则这将是一场艰苦的战斗。或者看看他们有什么;也许他们对此有一些原语,我很久没有处理pyparsing了
祝你好运,下次请问一个更好的问题 这只是一个草图;我甚至不打算尝试这个代码,因为我不确定你想要什么
为您的功能创建一个类:
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(cosinavalue(),0.9)
是一个对象(实际上是一个抽象语法树),它表示cosinavalue>0.9
。您可以这样评估它:
expr = GreaterThan(CosineValue(), 0.9)
expr.evaluate(Features(cosine=0.95, ...)) # returns True
expr.evaluate(Features(cosine=0.40, ...)) # returns False
这些对象看起来不太像,但它们正在具体化您的过程。它们的结构编码了以前的代码。想想看,因为这是你尝试做的唯一困难的部分:理解如何通过将计算转化为结构来延迟计算,以及当值成为计算的一部分时如何处理。您可能一直在思考如何编写这些“if”语句,并将它们与运行它们所需的代码和运行时值分开。现在,您应该能够了解如何进行编程,但这是一种更高级的编程思维方式
现在需要构建if/then结构。我也不确定你想在这里做什么,但我想说你的if/then将是一个类,它接受一个表达式,就像我们刚刚创建的一个参数和一个“then”案例,并进行测试,执行或不执行“then”案例。可能您需要if/then/else,或者一种跟踪它是否触发的方法,或者一种将if评估为值的方法。你必须考虑这一部分;没有人能根据你上面写的告诉你你应该做什么
为了使您的条件更强大,您需要为布尔运算符添加更多的类,这些布尔运算符将条件作为参数,但这应该很简单;您将有和和或,它们都将接受两个条件
参数,并且它们的计算将做明智的事情。您可以创建一个条件超类,然后添加一些方法,如和和或来简化这些结构的生成
最后,如果您想解析类似于上面所述的内容,您应该尝试一下,但要确保您拥有AST fig