Commit efbe8344 authored by D.H.D. Nguyen's avatar D.H.D. Nguyen
Browse files

update

parent 99e54dc1
Loading
Loading
Loading
Loading
+51 −0
Original line number Diff line number Diff line
from collections import Counter
import pandas as pd
from sys import argv, stdout, stderr

# temporary read file results (later with the extracted results from the database, must be in type list)
def scoring(items, best, worst):
	'''
	Calculate scores of the items using formula of Orme 2009
	para:
		items: (dict) Frequency of each item in all tuples
		best: (dict) 
		worst:(dict)
	return:
		scores: (dict)
	'''
	scores = {}
	for item in items:
		pos = best[item] if item in best else 0
		neg = worst[item] if item in worst else 0
		if (pos + neg) == 0:
			scores[item] = 0.0
		else:
			scores[item] = (pos - neg) / items[item]
	return scores

def main():
	file_tuples = argv[1]
	file_anno = argv[2]

	items = []
	for line in open(file_tuples).readlines():
		items += line.strip().split()
	items = Counter(items)
	datas = pd.read_csv(file_anno)

	best = Counter(list(datas['BestItem']))
	worst = Counter(list(datas['WorstItem']))

	scores = scoring(items, best, worst)

	with open('scores.txt', 'w') as f2w:
		for item, score in sorted(scores.items()):
			f2w.write('%s\t%.3f\n'%(item, score))

	stdout.write('Done scoring.\n')

if __name__ == '__main__':
	main()


+10 −0
Original line number Diff line number Diff line
A	1.000
B	0.625
C	0.500
D	0.125
E	0.125
F	-0.125
G	-0.375
H	-0.375
I	-0.500
J	-1.000
+11 −0
Original line number Diff line number Diff line
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URL'] = 'sqlite:///bws.db'

# secret key
app.secret_key = 'bestworstscaling'

# create a db object
db = SQLAlchemy(app)
 No newline at end of file
+71 −0
Original line number Diff line number Diff line
from app import db

class User(db.Model):
	__tablename__ = 'users'

	id = db.Column(db.Integer, primary_key=True)
	username = db.Column(db.String(50), nullable=False)
	email = db.Column(db.String(50), nullable=False)
	passwd = db.Column(db.String(100), nullable=False)

	projects = db.relationship('Projects', backref='user', lazy='joined') # lazy defines when SQLAlchemy will load the data from the database, see link of flasksqlalchemy!!


class Project(db.Model):
	__tablename__ = 'projects'

	id = db.Column(db.Integer, primary_key=True)
	user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

	batches = db.relationship('Batch', backref='project', lazy=True)
	annotators = db.relationship('Annotator', backref='project', lazy='joined')

class Batch(db.Model):
	__tablename__ = 'batches'

	id = db.Column(db.Integer, primary_key=True)
	project_id = db.Column(db.Integer, db.ForeignKey('project.id'), nullable=False)

	tuples = db.relationship('Tuple', backref='batch', lazy=True)

class Tuple(db.Model):
	__tablename__ = 'tuples'

	id = db.Column(db.Integer, primary_key=True)
	batch_id = db.Column(db.Integer, db.ForeignKey('batch.id'), nullable=False)
	items = db.relationship('Item', secondary=tuple_item, backref='tuple', lazy='subquery')
	datas = db.relationship('Datas', )

class Item(db.Model):
	__tablename__ = 'items'

	id = db.Column(db.Integer)

tuple_item = db.Table('tuple_item',
						db.Column('tuple_id', db.Integer, db.ForeignKey('tuple.id'), nullable=False),
						db.Column('item_id', db.Integer, db.ForeignKey('item.id'), nullable=False),
						db.PrimaryKeyConstraint('tuple_id', 'item_id'))

class Annotator(db.Model):
	__tablename__ = 'annotators'

	id = db.Column(db.Integer, primary_key=True)
	project_id = db.Column(db.Integer, db.ForeignKey('project.id'), nullable=False)
	link = db.Column(db.String(50), unique=True)

	datas = db.relationship('Datas', backref='annotator', lazy=True)

class Data(db.Model):
	__tablename__ = 'annotated datas'

	id = db.Column(db.Integer, primary_key=True)
	anno_id = db.Column(db.Integer, db.ForeignKey('annotator.id'), nullable=False)
	tuple_id = db.Column(db.Integer, db.ForeignKey('tuple.id'), nullable=False)

	
	




		
 No newline at end of file
−34.5 KiB (44.2 KiB)
Loading image diff...
Loading