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)
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)
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)