首页 > 其他分享 >软件体系结构笔记4-2(用代码直观理解)

软件体系结构笔记4-2(用代码直观理解)

时间:2024-09-19 10:51:44浏览次数:3  
标签:词性 word NN 知识 笔记 黑板 软件体系结构 直观 标注

四、Data-centered Software Architecture Style(数据为中心的体系结构风格)

2、黑板体系结构风格

黑板体系结构是一种问题求解模式,特别适用于那些难以事先完全形式化的复杂问题。它由三个主要组件组成:

  • 黑板(Blackboard):一个共享的信息库,所有知识源都可以读取和写入。在我们的例子中,黑板将存储输入的词和它们的词性标注。
  • 知识源(Knowledge Source):一组独立的模块,每个模块负责解决问题的某个特定方面。在我们的例子中,知识源将是不同的词性标注规则。
  • 控制(Control):一个控制模块,负责协调知识源的活动,决定哪个知识源应该在什么时候运行。

示例:基于NLTK的黑板词性标注系统

import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

"""
NN:名词
NNS:名词复数
VB:动词
DT:限定词
PRP:人称代词
VBZ:动词现在式第三人称时态
JJ:形容词
......
"""

# 黑板
blackboard = {}

# 知识源1:简单的词性标注规则
def rule1(word):
    if word.endswith('ing'):
        return 'VBG'  # 现在分词
    elif word.endswith('ed'):
        return 'VBD'  # 过去式
    else:
        return None

# 知识源2:NLTK提供的默认词性标注器
def rule2(word):
    return nltk.pos_tag([word])[0][1]

# 控制模块
def control():
    while True:
        sentence = input("请输入一个句子:")
        words = sentence.split()
        for word in words:
            for rule in [rule1, rule2]:
                tag = rule(word)
                if tag:
                    blackboard[word] = tag
                    break
        print(blackboard)
        blackboard.clear()  # 清空黑板

if __name__ == "__main__":
    control()

结果演示:

请输入一个句子:today is a good day
{'today': 'NN', 'is': 'VBZ', 'a': 'DT', 'good': 'JJ', 'day': 'NN'}

请输入一个句子:i have an apple
{'i': 'NN', 'have': 'VB', 'an': 'DT', 'apple': 'NN'}

请输入一个句子:i love you
{'i': 'NN', 'love': 'NN', 'you': 'PRP'}

请输入一个句子:Furthering that point, the association noted a number of somber research findings, including that men are four times more likely than women to die of suicide worldwide, are "far more likely" than women to be arrested and charged with intimate partner violence in the U.S. and commit about 90 percent of all homicides nationwide.

{'Furthering': 'VBG', 'that': 'IN', 'point,': 'NN', 'the': 'DT', 'association': 'NN', 'noted': 'VBD', 'a': 'DT', 'number': 'NN', 'of': 'IN', 'somber': 'NN', 'research': 'NN', 'findings,': 'NN', 'including': 'VBG', 'men': 'NNS', 'are': 'VBP', 'four': 'CD', 'times': 'NNS', 'more': 'RBR', 'likely': 'JJ', 'than': 'IN', 'women': 'NNS', 'to': 'TO', 'die': 'NN', 'suicide': 'NN', 'worldwide,': 'NN', '"far': 'NN', 'likely"': 'NN', 'be': 'VB', 'arrested': 'VBD', 'and': 'CC', 'charged': 'VBD', 'with': 'IN', 'intimate': 'NN', 'partner': 'NN', 'violence': 'NN', 'in': 'IN', 'U.S.': 'NNP', 'commit': 'NN', 'about': 'IN', '90': 'CD', 'percent': 'NN', 'all': 'DT', 'homicides': 'NNS', 'nationwide.': 'NN'}

代码解释

  1. 黑板:使用Python字典blackboard来存储词和对应的词性标注。
  2. 知识源:定义了两个知识源rule1rule2rule1基于简单的后缀规则进行词性标注,rule2使用NLTK提供的默认词性标注器。
  3. 控制control函数负责控制整个系统的运行。它不断地从用户输入句子,然后对每个词调用所有的知识源,直到找到一个合适的词性标注。

如何运行

  1. 确保你已经安装了NLTK库。
  2. 运行这段代码。
  3. 输入一个句子,程序会输出每个词的词性标注。

这个例子展示了黑板体系结构的几个特点:

  • 知识的共享:所有的知识源都共享同一个黑板,可以随时读取和修改其中的信息。
  • 知识源的独立性:每个知识源都是独立的,可以根据自己的规则进行推理。
  • 控制的灵活性:控制模块可以根据不同的情况选择不同的知识源。

这个例子虽然简单,但已经体现了黑板体系结构在解决自然语言处理问题时的优势。 我们可以很容易地添加更多的知识源,来提高词性标注的准确性。

标签:词性,word,NN,知识,笔记,黑板,软件体系结构,直观,标注
From: https://blog.csdn.net/qq_52060318/article/details/142354253

相关文章

  • C++学习笔记(28)
    十四、实现strchr()和strrchr()函数示例:#define_CRT_SECURE_NO_WARNINGS//使用C风格字符串操作的函数需要定义这个宏#include<iostream>usingnamespacestd;//返回在字符串s中第一次出现c的位置,如果找不到,返回0。//babcddefaeaconstchar*mystrchr(co......
  • java基础 -IO流笔记
    610,文件的基础知识文件流 输入流和输出流都是相对java程序内存而言 611,创建文件 在D盘下创建文件。packagecom.hspedu.file;importorg.junit.jupiter.api.Test;importjava.io.File;importjava.io.IOException;//演示创建文件publicclassFileCreate{......
  • C++学习笔记(一、预备知识)
    C++简介C++融合了三种不同的编程方式:-C语言代表的过程性语言-C++在C语言基础上添加的类代表的面向对象语言-C++模板支持的泛型编程。值得一提的是,不要把C语言与C++混为一谈,他们可以说是两个不同的语言。C++简史2.1C语言20世纪70年代,贝尔实验室的DennisRi......
  • java代码-编译-打包-执行_云原生时代笔记总结
    楔子:可能201几年开发的时候,有个ide,加上打包插件,就可以开发了,测试的时候war包扔到服务器容器里就可以跑起来了。(而且没有做过批处理的小伙伴对jar包执行可能不甚熟悉,只见过web容器的目录结构和lib中的jar包。)但是2015年之后应该是全面进入,云原生时代。大量操作需要linux命令行......
  • 读书笔记(14)《敢问路在何方》
    序言1982年的春节,电视系列片《西游记》开始动工。那时距离现在,已经过去了整整三十年!八十年代,是拼搏的年代,是奋斗的年代,是奉献的年代!拍摄《西游记》系列片,用去了六年的时间。这段时间,我和全剧组的同志们一起,跋山涉水,茹苦含辛,往返于祖国的北国南疆,其中甘苦不胜枚举。《西游记》剧组......
  • 吴恩达机器学习课程 笔记1 概念
    主要的人工智能分支人工智能(AI)是一个广泛的领域,包含了多个子领域或分支,每个分支都专注于解决特定类型的问题或执行特定的任务。以下是一些主要的人工智能分支:机器学习(MachineLearning):这是AI的一个核心部分,专注于构建可以从数据中学习并作出决策或预测的系统。深度学习(D......
  • Windows常用快捷键(学习笔记)
    键盘功能键:Tab,Shift,Ctrl,Win,空格,Enter,↑↓←→常用功能:Ctrl+Shift  ----  切换输入法Alt+F4----关闭窗口Ctrl+C ----复制Ctrl+V ----粘贴Ctrl+A ----全选Ctrl+X ----剪切Ctrl+Z ----撤销Ctrl+S ----保存Ctrl+D----功能:打开“添加收......
  • OSG开发笔记(三十):OSG加载动力学仿真K模型文件以及测试Demo
    前言  Osg需要打开模型文件,但是遇到显示动力学仿真的K模型文件,.k文件是一种描述材料属性的文件,比如密度、弹性模量等,该模型文件不是常规中间开放格式,无法直接支持,需要自定义解析并且重建三维模型。<br>Demo  实际非常流程,因为视频转gif导致部分看起来不行:      <......
  • c++primer第七章函数学习笔记
    函数的基本知识定义函数无返回值voidfunctionName(parameterList){  statement(s);  return;//optional}有返回值  typeNamefuntionName(parameterList)  {    statements;    returnvalue;  }#include<iostream>usi......
  • JavaSE——Java基础语法(黑马个人听课笔记)
    1.关键字介绍关键字:被Java赋予了特定含义的英文单词关键字的字母全部小写 常用的代码编辑器,针对关键字由特殊的颜色标记,非常直观2.常量2.1常量概述常量:在程序的执行过程中,其值不会发生改变的量(数据)  2.2常量的分类:字符串常量:被双引号包裹的内容整数常量:所......