gpt4 book ai didi

python-3.x - CLIPS Python3 CLIPSError

转载 作者:行者123 更新时间:2023-12-03 19:46:27 25 4
gpt4 key购买 nike

我遇到了一些 CLIPSpy 代码的问题。我已将问题缩小到 CLIPS_CONSTRUCTS.encode() 的编码方法或 environment.load(constructs_file.name)。我试图捕获的目标是在油温高于 32 且油压高于 0 时触发规则。我附上了我正在使用的 SampleData.csv。这是我论文研究的一部分,我想感谢所有帮助我的人!

  • 操作系统和版本:Windows 10 64 位
  • Python 版本:3.7.2
  • 库和版本(通过 pip 列表)
    cffi 1.11.5
    剪辑 spy 0.3.0
    点子 18.1
    pycparser 2.19
    安装工具 40.6.2

Error Received

import sys
from tempfile import NamedTemporaryFile

import clips


CLIPS_CONSTRUCTS = """
(deftemplate oil-measure
(slot utc-time (type STRING))
(slot temperature (type INTEGER))
(slot pressure (type INTEGER)))

(defrule oil-is-hot
(oil-measure (temperature ?temp) (utc-time ?time))
(test (> ?temp 32))
=>
(printout t ?time tab "temperature:" tab ?temp crlf))

(defrule pressure-is-high
(oil-measure (pressure ?press&:(> ?press 0)) (utc-time ?time))
=>
(printout t ?time tab "pressure:" tab ?press crlf))
"""


def main():
environment = clips.Environment()

# use environment.load() to load constructs from a file
with NamedTemporaryFile() as constructs_file:
constructs_file.write(CLIPS_CONSTRUCTS.encode())
constructs_file.flush()

environment.load(constructs_file.name)

# enable fact duplication as data has duplicates
environment.eval("(set-fact-duplication TRUE)")

# Template facts can be built from their deftemplate
oil_measure_template = environment.find_template("oil-measure")

for time, temp, press in get_data_frames(sys.argv[1]):
new_fact = oil_measure_template.new_fact()

# Template facts are represented as dictionaries
new_fact["utc-time"] = time
new_fact["temperature"] = int(temp)
new_fact["pressure"] = int(press)

# Add the fact into the environment Knowledge Base
new_fact.assertit()

# Fire all the rules which got activated
environment.run()


def get_data_frames(file_path):
"""Parse a CSV file returning the dataframes."""
with open(file_path) as data_file:
return [l.strip().split(",") for i, l in enumerate(data_file) if i > 1]


if __name__ == "__main__":
main()

SampleData.csv

最佳答案

这是 Windows 上 NamedTemporaryFile 的限制,已记录 here .

您可以使用 mkstemp 或您在完成后自行删除的常规文件来解决此问题。

constructs_file, constructs_file_name = mkstemp()
constructs_file.write(CLIPS_CONSTRUCTS.encode())
constructs_file.close()

environment.load(constructs_file_name)
os.remove(constructs_file_name)

关于python-3.x - CLIPS Python3 CLIPSError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54156047/

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