zoukankan      html  css  js  c++  java
  • AICOP高校评分系统

     

    该高校评分系统的模型:

     

    高校是公办高校,国家教育部直属 比 地方直属的 办学地位和办学资源更高。综合学校 比 专业单一学校办学实力强。工科财经师范等比林业语言等学校在社会的认可度和发挥的价值更大。

    给高校一个 基础分,该基础分包含默认的硕士点个数、博士点个数,再考虑主要因素。

     

    高校评分是一个综合复杂的系统,该系统只考虑了主要的因素,还有很多特殊的因素未考虑,如学校的特长专业、知名校友等因素。

     

     pasting

    #coding=UTF-8

    import os
    import Tkinter as tk
    import tkFont
    import string
    import tkMessageBox

    COLLEAGE_BASE_SCORE = 62

    COLLEAGE_BASE_FILE_NAME = 'college_base.txt'
    NO_COLLEAGE_BASE_INFO = COLLEAGE_BASE_FILE_NAME+u'中没有该学校的信息。'
    COLLEAGE_DESC_TXT_DIR = '.\college-text\filter\'
    COLLEAGE_DESC_TXT_EXT = '.txt'
    NO_COLLEAGE_DESC_INFO = COLLEAGE_DESC_TXT_DIR+u'中没有该学校的描述信息'

    BASE_MASTER_NUM = 80
    BASE_DOCTOR_NUM = 10
    BASE_POST_DOCTOR_NUM = 2

    def CheckColleageSourceInfoExsit(ColleageName):
    if False == os.path.exists(COLLEAGE_BASE_FILE_NAME):
    return NO_COLLEAGE_BASE_INFO
    ColleageDescFile = COLLEAGE_DESC_TXT_DIR + ColleageName + COLLEAGE_DESC_TXT_EXT
    if False == os.path.exists(ColleageDescFile):
    return NO_COLLEAGE_DESC_INFO
    return ''

    ###########################################################################
    # 分析college_base.txt
    ###########################################################################
    def GetColleageInfo(ColleageName):
    if False == os.path.exists(COLLEAGE_BASE_FILE_NAME):
    return NO_COLLEAGE_BASE_INFO
    IsFind = False
    ColleageInfoFile = open(COLLEAGE_BASE_FILE_NAME, 'rt')
    try:
    ColleageInfoLines = ColleageInfoFile.readlines()
    for line in ColleageInfoLines:
    line = line.decode('utf8', 'ignore')
    if string.find(line, ColleageName) != -1:
    ColleageInfo = line
    IsFind = True
    break
    finally:
    ColleageInfoFile.close()
    if IsFind == True:
    return ColleageInfo
    else:
    return ''

    def GetColleageScoreByKind(ColleageInfo):
    KindsDict = {u'综合': 0.2, u'工科': 0.15, u'医药': 0.1, u'财经': 0.1, u'师范': 0.1,
    u'政法': 0, u'农业': 0, u'林业': 0, u'军事': 0, u'民族': 0, u'体育': 0, u'艺术': 0, u'语言': 0}
    ColleageInfoList = string.split(ColleageInfo, ' ')
    for key in KindsDict.keys():
    if key == ColleageInfoList[4]:
    return KindsDict[key]
    return 0

    def GetColleageScoreByLevel(ColleageInfo):
    LevelsDict = {u'本科': COLLEAGE_BASE_SCORE, u'高职专科': COLLEAGE_BASE_SCORE, u'独立学院': COLLEAGE_BASE_SCORE, u'其它': COLLEAGE_BASE_SCORE}
    ColleageInfoList = string.split(ColleageInfo, ' ')
    for key in LevelsDict.keys():
    if key == ColleageInfoList[5]:
    return LevelsDict[key]
    return COLLEAGE_BASE_SCORE

    def GetColleageScoreByBelongTo(ColleageInfo):
    BelongToDict = {u'教育部': 0.5, u'北京市教育委员会': 0, u'江苏省教育厅': 0, u'上海市教育委员会': 0, u'天津市教育委员会': 0, u'重庆市教育委员会': 0,
    u'福建省教育厅': 0, u'广东省教育厅': 0, u'浙江省教育厅': 0, u'山东省教育厅': 0,
    u'黑龙江省教育厅': 0, u'四川省教育厅': 0, u'安徽省教育厅': 0,
    u'甘肃省教育厅': 0, u'广西壮族自治区教育厅': 0, u'贵州省教育厅': 0, u'海南省教育厅': 0,
    u'河北省教育厅': 0, u'河南省教育厅': 0, u'湖北省教育厅': 0, u'湖南省教育厅': 0, u'吉林省教育厅': 0, u'江西省教育厅': 0,
    u'辽宁省教育厅': 0, u'内蒙古自治区教育厅': 0, u'宁夏回族自治区教育厅': 0, u'山西省教育厅': 0, u'陕西省教育厅': 0,
    u'新疆维吾尔自治区教育厅': 0, u'云南省教育厅': 0, u'中华全国总工会': 0}
    ColleageInfoList = string.split(ColleageInfo, ' ')
    for key in BelongToDict.keys():
    if key == ColleageInfoList[6]:
    return BelongToDict[key]
    return 0

    def GetColleageScoreByIs211(ColleageInfo):
    ColleageInfoList = string.split(ColleageInfo, ' ')
    if '1' == ColleageInfoList[7]:
    return 0.3
    else:
    return 0

    def GetColleageScoreByIs985(ColleageInfo):
    ColleageInfoList = string.split(ColleageInfo, ' ')
    if '1' == ColleageInfoList[8]:
    return 0.3
    else:
    return 0

    def CalcColleageScoreByBaseInfo(ColleageName):
    ColleageScore = 0
    ColleageInfo = GetColleageInfo(ColleageName)
    ColleageInfoList = string.split(ColleageInfo, ' ')
    #assert len(ColleageInfoList) == 10
    if len(ColleageInfoList) == 10:
    ColleageScore1 = GetColleageScoreByKind(ColleageInfo)
    ColleageScore2 = GetColleageScoreByLevel(ColleageInfo)
    ColleageScore3 = GetColleageScoreByBelongTo(ColleageInfo)
    ColleageScore4 = GetColleageScoreByIs211(ColleageInfo)
    ColleageScore5 = GetColleageScoreByIs985(ColleageInfo)
    ColleageScore = ColleageScore1 + ColleageScore2 + ColleageScore3 + ColleageScore4 + ColleageScore5
    else:
    ColleageScore = COLLEAGE_BASE_SCORE
    #
    return ColleageScore

    ###########################################################################
    # 分析txt文件描述
    ###########################################################################
    def IsColleageDescContain(ColleageName, DestColleageDesc):
    ColleageDescFile = COLLEAGE_DESC_TXT_DIR + ColleageName + COLLEAGE_DESC_TXT_EXT
    if False == os.path.exists(ColleageDescFile):
    return False
    ColleageInfo = ''
    ColleageDescFile = open(ColleageDescFile, 'rt')
    try:
    ColleageDescLines = ColleageDescFile.readlines()
    for line in ColleageDescLines:
    line = line.decode('GB2312', 'ignore')
    if string.find(line, DestColleageDesc) != -1:
    ColleageInfo = line
    break
    finally:
    ColleageDescFile.close()
    if string.find(ColleageInfo, DestColleageDesc) != -1:
    return True
    return False

    def GetNumStr(NumDesc):
    DescLen = len(NumDesc)
    NumStr = ''
    for index in range(0, DescLen):
    if NumDesc[index] > '0' and NumDesc[index] < '9':
    NumStr = NumStr+NumDesc[index]
    else:
    if len(NumStr) > 0:
    break
    return NumStr

    def GetColleageDoctorMasterNum(ColleageName, DegreeDesc):
    DoctorNum = 0
    ColleageDescFile = COLLEAGE_DESC_TXT_DIR + ColleageName + COLLEAGE_DESC_TXT_EXT
    if False == os.path.exists(ColleageDescFile):
    return DoctorNum
    IsFind = False
    NumStr = ''
    ColleageDescFile = open(ColleageDescFile, 'rt')
    try:
    ColleageDescLines = ColleageDescFile.readlines()
    for line in ColleageDescLines:
    line = line.decode('GB2312', 'ignore')
    if True == IsFind:
    NumStr = GetNumStr(line).strip()
    if len(NumStr) > 0 :
    break
    else:
    IsFind = False
    if string.find(line, DegreeDesc) != -1:
    IsFind = True
    finally:
    ColleageDescFile.close()
    if True == IsFind and len(NumStr) > 0:
    DoctorNum = string.atoi(NumStr)
    if string.find(line, u'一级学科') != -1:
    DoctorNum = DoctorNum*4;
    return DoctorNum

    def GetColleageScoreBy9TopColleage(ColleageName):
    if True == IsColleageDescContain(ColleageName, u'九校联盟') or True == IsColleageDescContain(ColleageName, u'C9联盟'):
    return 3
    else:
    return 0

    def GetColleageScoreByMountEverestColleage(ColleageName):
    if True == IsColleageDescContain(ColleageName, u'珠峰计划'):
    return 1.5
    else:
    return 0

    def GetColleageScoreByDoctorAndMasterNum(ColleageName):
    MasterNum = GetColleageDoctorMasterNum(ColleageName, u'硕士点')
    Score1 = (MasterNum-BASE_MASTER_NUM)/60.0
    DoctorNum = GetColleageDoctorMasterNum(ColleageName, u'博士点')
    Score2 = (DoctorNum-BASE_DOCTOR_NUM)/40.0
    PostDoctorNum = GetColleageDoctorMasterNum(ColleageName, u'博士后流动站')
    Score3 = (PostDoctorNum - BASE_POST_DOCTOR_NUM) / 10.0
    return Score1+Score2+Score3

    def GetColleageScoreBySpecialInfo(ColleageName):
    ColleageScore = 0
    if True == IsColleageDescContain(ColleageName, u'第一所国立大学'):
    ColleageScore = 5
    if True == IsColleageDescContain(ColleageName, u'世界一流大学'):
    ColleageScore = ColleageScore + 5
    if True == IsColleageDescContain(ColleageName, u'诺贝尔奖'):
    ColleageScore = ColleageScore + 5
    if True == IsColleageDescContain(ColleageName, u'共和国主席'):
    ColleageScore = ColleageScore + 5
    if True == IsColleageDescContain(ColleageName, u'国家最高教育行政机关'):
    ColleageScore = ColleageScore + 5
    return ColleageScore

    def CalcColleageScoreByTxtInfo(ColleageName):
    ColleageScore1 = GetColleageScoreBy9TopColleage(ColleageName)
    if 0 == ColleageScore1:
    ColleageScore1 = GetColleageScoreByMountEverestColleage(ColleageName)
    ColleageScore2 = GetColleageScoreByDoctorAndMasterNum(ColleageName)
    ColleageScore3 = GetColleageScoreBySpecialInfo(ColleageName)
    return ColleageScore1 + ColleageScore2 + ColleageScore3

    ###########################################################################
    # 窗口
    ###########################################################################
    class Application(tk.Frame):
    def __init__(self, master=None):
    tk.Frame.__init__(self, master)
    # Set Window Attribute
    self.winWidth = 400
    self.winHeight = 219
    winSizePos = '%dx%d+%d+%d' % (self.winWidth, self.winHeight, (root.winfo_screenwidth()-self.winWidth)/2 , (root.winfo_screenheight()-self.winHeight)/2)
    self.master.geometry(winSizePos)
    self.master.title("Colleage Scoring")
    self.master.resizable(width=False, height=False)
    self.grid(sticky=tk.N + tk.S + tk.E + tk.W)
    self.createWidgets()

    def createWidgets(self):
    top = self.winfo_toplevel()
    top.rowconfigure(0, weight=1)
    top.columnconfigure(0, weight=1)
    #
    self.rowconfigure(0, minsize=30)
    self.rowconfigure(1, minsize=40)
    self.rowconfigure(2, minsize=20)
    self.rowconfigure(3, minsize=40)
    self.rowconfigure(4, minsize=10)
    self.rowconfigure(5, minsize=30)
    self.rowconfigure(6, minsize=8)
    self.rowconfigure(7, minsize=30)
    self.columnconfigure(0, minsize=15)
    self.columnconfigure(1, minsize=80)
    self.columnconfigure(2, minsize=200)
    self.columnconfigure(3, minsize=80)
    #
    widgetXorYPad = 6
    winFont = tkFont.Font(family='Fixdsys', size=9, weight=tkFont.NORMAL)
    self.currColleageName = tk.StringVar()
    self.currColleageScore = tk.StringVar()
    #
    tk.Label(self, text="Colleage:", font=winFont).grid(row=1, column=1, sticky=tk.W, padx=widgetXorYPad)
    self.editColleageName = tk.Entry(self, font=winFont, textvariable=self.currColleageName)
    self.editColleageName.grid(row=1, column=2, sticky=tk.W + tk.E + tk.N + tk.S, pady=widgetXorYPad)
    self.btnCalcCmd = tk.Button(self, text="Calc", font=winFont, fg="blue")
    self.btnCalcCmd.grid(row=1, column=3, sticky=tk.E + tk.W, padx=widgetXorYPad)
    self.btnCalcCmd.bind('<ButtonRelease-1>', self.CalcCmd)

    tk.Label(self, text="Score:").grid(row=3, column=1, sticky=tk.W, padx=widgetXorYPad)
    self.editColleageScore = tk.Entry(self, textvariable=self.currColleageScore, font=winFont)
    self.editColleageScore.grid(row=3, column=2, sticky=tk.W + tk.E + tk.N + tk.S, pady=widgetXorYPad)

    self.btnCalcCmd = tk.Button(self, text="Calc All", font=winFont, fg="blue")
    self.btnCalcCmd.grid(row=5, column=2, sticky=tk.E + tk.W, padx=18)
    self.btnCalcCmd.bind('<ButtonRelease-1>', self.CalcAllCmd)

    self.commentVar = tk.StringVar()
    tk.Label(self, textvariable=self.commentVar, wraplength = 200, font=winFont).grid(row=7,column=1,columnspan=3,sticky=tk.N + tk.S + tk.E + tk.W)

    def CalcColleageScore(self,ColleageName):
    ErrorInfo = CheckColleageSourceInfoExsit(ColleageName)
    if len(ErrorInfo) > 0:
    return ErrorInfo
    else:
    ColleageScore1 = CalcColleageScoreByBaseInfo(ColleageName)
    ColleageScore2 = CalcColleageScoreByTxtInfo(ColleageName)
    ColleageScore = ColleageScore1 + ColleageScore2
    if ColleageScore > 100:
    ColleageScore = 100
    return '%.2f' %ColleageScore

    def CalcCmd(self, event):
    ColleageName = self.currColleageName.get().strip()
    if 0 == len(ColleageName):
    return;

    self.currColleageScore.set('')
    self.commentVar.set('')
    self.currColleageScore.set(self.CalcColleageScore(ColleageName))

    def CalcAllCmd(self, event):
    AllColleageScore = open('college_base_score.txt', 'wt')

    IsFirstLine = True
    ColleageBaseFile = open('college_base.txt', 'rt')
    try:
    ColleageBaseLines = ColleageBaseFile.readlines()
    for line in ColleageBaseLines:
    line = line.decode('utf8', 'ignore')
    if True == IsFirstLine:
    ScoreInfo = u"系统评分"
    IsFirstLine = False
    else:
    ColleageInfoList = string.split(line, ' ')
    ScoreInfo = self.CalcColleageScore(ColleageInfoList[2])
    AllColleageScore.write(ScoreInfo.encode('GB2312', 'ignore'))
    AllColleageScore.write(' ')
    AllColleageScore.write(line.encode('GB2312', 'ignore'))
    finally:
    ColleageBaseFile.close()

    AllColleageScore.close()
    self.commentVar.set('所有高校的评分在文件college_base_score.txt的第一列')

    root = tk.Tk()
    app = Application(root)
    app.mainloop()

    # if isinstance(ColleageName, unicode):
    # tkMessageBox.showinfo('', 'In CalcCmd, unicode')

    #AllColleageInfo = open('ColleageScoreCompare.txt', 'wt')
    #
    #IsFirstLine = True
    #ColleageScoreFile = open('college_score.txt', 'rt')
    #try:
    # ColleageScoreLines = ColleageScoreFile.readlines()
    # for line in ColleageScoreLines:
    # line = line.decode('utf8', 'ignore')
    # if True == IsFirstLine:
    # ScoreInfo = u"系统评分"
    # IsFirstLine = False
    # else:
    # ColleageScoreList = string.split(line, ' ')
    # ScoreInfo = self.CalcColleageScore(ColleageScoreList[0])
    # AllColleageInfo.write(ScoreInfo.encode('GB2312', 'ignore'))
    # AllColleageInfo.write(' ')
    # AllColleageInfo.write(line.encode('GB2312', 'ignore'))
    #finally:
    # ColleageScoreFile.close()
    #
    #AllColleageInfo.close()
    pasting
  • 相关阅读:
    SQL中的选择判断
    Rsync
    LAMP性能优化的一些建议
    Toad9.7与Oracle11g在X86的Win7下的情况
    IIS中IUSR_和IWAM_:计算机名帐户的用户名和密码的用途
    winform编程中的跨线程访问资源(转)
    MSTDC服务的应用及相关错误的解决方案(转载)
    SQL Server 错误代码详解
    poj 1777梅森素数
    hdu 2815 baby_step c可为非素数
  • 原文地址:https://www.cnblogs.com/ant-wjf/p/6368643.html
Copyright © 2011-2022 走看看