Esempio n. 1
0
def cfg_handler():
    rules = request.args.get('rules', '')
    base = request.args.get('base', '')
    results = []
    if len(rules):
        cfg_rules = cfg.read_rules(rules.split('\n'))
        results = [cfg.expand(base, cfg_rules) for i in xrange(10)]

    return render_template('cfg.html', rules=rules, base=base, results=results)
Esempio n. 2
0
def index_handler():
    subject = request.args.get('subject', '')
    rules = {}
    article = ''
    tree = []
    if subject:
        rules = generate_rules(subject)
        rules['SUBJECT'] = [subject]
        merge(rules, base_rules)
        merge(rules, cfg.read_rules(open('rules/%s.rules' % subject)))

        article = cfg.expand('START', rules, tree)

    return render_template('index.html',
        subjects=subjects, subject=subject,
        article=article, rules=rules, tree=tree)
Esempio n. 3
0
def fill_from_context_free_grammar(request, text, attempts=10000):

	pos_tagged = cfg.pos_tagged_from_text(text)
	grammar = cfg.pos_grammar_from_tagged(pos_tagged)
	pos_dict = cfg.word_frequency_by_pos(pos_tagged)
	pos_sequences = [cfg.expand('NP', grammar) for i in range(attempts)]
	
	correct_length_sequences = [sequence for sequence in pos_sequences if len(sequence.split())==len(request)]
	
	candidates = []

	for sequence in correct_length_sequences:
		scaffold = [None for i in range(len(request))]
		tags = sequence.split()
		for i, tag in enumerate(tags):
			words_with_tag = pos_dict[tag]
			words_with_initial = [word for word in words_with_tag if word[0] == request[i]]
			if len(words_with_initial) > 0:
				scaffold[i] = random.choice(words_with_initial)
		
		if not None in scaffold:
			candidates.append(scaffold)


	keywords = dict(wikiwords.keywords_with_scores(request.lower())[:150])
	markov_dict = markov.forward_dict(text)

	keyword_scores = [(candidate, score_by_keywords(candidate, keywords)) for candidate in candidates]
	markov_scores = [(candidate, score_by_markov(candidate, markov_dict)) for candidate in candidates]

	keyword_weight = 1
	markov_weight = 0

	candidates_scored_by_mixture = [(candidate, keyword_scores[i][1]*keyword_weight + markov_scores[i][1]*markov_weight) for i, candidate in enumerate(candidates)]

	return sorted(candidates_scored_by_mixture[:20], key=lambda x: x[1], reverse=True)