示例#1
0
def markov_test():
    print("### Markov Test")
    m = Markov(3, "word")
    m.train("../data/texts/lotr_clean.txt")

    generated = m.generate(10)
    pp.pprint(generated)
    print("\n")
示例#2
0
def lambda_handler(event, context):
    """Entrypoint for AWS Lambda. Event contains the payload from the AWS Lambda
       call."""
    user_text = event['userText']
    mixin = event['mixin']
    length = int(event['length'])

    full_text = user_text + load_mixin(mixin)
    markover = Markov(full_text)
    return markover.generate(length)
示例#3
0
def lambda_handler(event, context):
    """Entrypoint for AWS Lambda. Event contains the payload from the AWS Lambda
       call."""
    user_text = event['userText']
    mixin = event['mixin']
    length = int(event['length'])

    full_text = user_text + load_mixin(mixin)
    markover = Markov(full_text)
    return markover.generate(length)
示例#4
0
class TestMarkovClass(unittest.TestCase):
    """
    Test that the Markov wrapper class behaves as expected
    """
    def setUp(self):
        self.markov = Markov(prefix="testclass", db=11)

    def test_add_line_to_index(self):
        line = ['i', 'ate', 'a', 'peach']
        line1 = ['i', 'ate', 'one', 'peach']
        line2 = ['i', 'ate', 'a', 'sandwich']

        self.markov.add_line_to_index(line)
        self.markov.add_line_to_index(line1)
        self.markov.add_line_to_index(line2)
        self.assertEqual(self.markov.client.zscore("testclass:i:ate", "a"),
                         2.0)
        self.assertEqual(self.markov.client.zscore("testclass:ate:a", "peach"),
                         1.0)

    def test_score_for_line(self):
        self.test_add_line_to_index()
        line = ['i', 'ate', 'a', 'peach']
        self.assertEqual(self.markov.score_for_line(line), 100)

    def test_generate(self):
        self.test_add_line_to_index()
        generated = self.markov.generate(max_words=3)
        assert len(generated) >= 2
        assert len(generated) <= 3
        generated = self.markov.generate(seed=['ate', 'one'], max_words=3)
        assert 'peach' in generated
        assert 'sandwich' not in generated

    def tearDown(self):
        """
        clean up our redis keys
        """
        keys = self.markov.client.keys(self.markov.prefix + "*")
        for key in keys:
            self.markov.client.delete(key)
示例#5
0
class TestMarkovClass(unittest.TestCase):
    """
    Test that the Markov wrapper class behaves as expected
    """
    def setUp(self):
        self.markov = Markov(prefix="testclass",db=11)

    def test_add_line_to_index(self):
        line =  ['i','ate','a','peach']
        line1 = ['i','ate','one','peach']
        line2 = ['i','ate','a', 'sandwich']

        self.markov.add_line_to_index(line)
        self.markov.add_line_to_index(line1)
        self.markov.add_line_to_index(line2)
        self.assertEqual(self.markov.client.zscore("testclass:i:ate", "a"), 2.0)
        self.assertEqual(self.markov.client.zscore("testclass:ate:a", "peach"), 1.0)
                
    def test_score_for_line(self):
        self.test_add_line_to_index()
        line = ['i','ate','a','peach']
        self.assertEqual(self.markov.score_for_line(line), 100)
       
        
    def test_generate(self):
        self.test_add_line_to_index()
        generated = self.markov.generate(max_words=3)
        assert len(generated) >= 2
        assert len(generated) <= 3
        generated = self.markov.generate(seed=['ate','one'], max_words=3)
        assert 'peach' in generated 
        assert 'sandwich' not in generated
        
    def tearDown(self):
        """
        clean up our redis keys
        """
        keys = self.markov.client.keys(self.markov.prefix+"*")
        for key in keys:
            self.markov.client.delete(key)
示例#6
0
def caption(username, start, end):
    scraper = Scraper(username, start, end)
    text = scraper.text
    try:
        markov = Markov(text)
    except:
        if len(text) < 1:
            return "Username not found or private account"
        return "Not enough captions found to generate new text"
    text = markov.generate()
    if text == None or len(text) < 1:
        text = "Not enough captions found to generate new text"
    return text
示例#7
0
def newTweet():
    tweet_data = Markov(prefix="tweets")
    tweetline = tweet_data.generate()
    tweet = ""
    for word in tweetline:
        tweet += word + " "

    tweet = tweet.rstrip()

    if len(tweet) > 140:
        return newTweet()
    else:
        return tweet
示例#8
0
def newTweet():
    tweet_data = Markov(prefix="tweets")
    tweetline = tweet_data.generate()
    tweet = ""
    for word in tweetline:
        tweet += word + " "
    
    tweet = tweet.rstrip()
    
    if len(tweet)>140:
        return newTweet()
    else:
        return tweet
示例#9
0
class TestMarkov(unittest.TestCase):
    """test class of markov.py"""
    def setUp(self):
        print('*** setup ***')
        self.markov = Markov()

    def test_add_sentense(self):
        self.__add_sentense_bocchan()
        self.assertTrue(len(self.markov.starts) > 0)
        self.assertTrue(len(self.markov.dic) > 0)

    def test_generate(self):
        self.__add_sentense_bocchan()
        input_texts = [
            '初めまして、坊ちゃん', 'あら、ご病気ですか', 'あらあら、大変ですね', 'いたずらして病気になっちゃったんですか?',
            'そんな威張らなくてもいいでしょう', 'はあ、そんなもんですか', '遅刻しちゃだめですね', 'よく覚えてないんですか?',
            'ターナー?', 'どなたですか?'
        ]

        for input_text in input_texts:
            with self.subTest():
                tokens = Morph.analyze(input_text)
                keyword = 'N/A'
                for token in tokens:
                    if Morph.is_keyword(token):
                        keyword = token.surface
                generated = self.markov.generate(keyword)
                print('you > ' + input_text)
                print('generated > ' + generated)
                print('************')
                self.assertTrue(len(generated) > 0)

    # private method
    def __add_sentense_bocchan(self):
        sample_file = '../KOISURU_PROGRAM/sample/markov/bocchan.txt'
        content = ''

        original_content = codecs.open(sample_file, 'r', 'shift_jis')
        for row in original_content:
            content += row.rstrip()
        original_content.close()
        texts = re.split(r'[。??!!  ]+', content)

        for text in texts:
            if text == '':
                continue
            tokens = Morph.analyze(text)
            self.markov.add_sentence(tokens)
            print('.', end='')
        print('')
示例#10
0
def tweet(userName):
    twitter = OAuth1Session(settings.CONSUMER_KEY, settings.CONSUMER_SECRET,
                            settings.ACCESS_TOKEN,
                            settings.ACCESS_TOKEN_SECRET)

    markov = Markov()
    tweets = markov.generate()
    randomtweet = tweets
    #randomtweet = tweets[random.randrange(len(tweets))]

    params = {"status": randomtweet}
    #params = {"status": '@' + userName + ' ' + randomtweet + ' ' + str(datetime.datetime.today())}
    req = twitter.post("https://api.twitter.com/1.1/statuses/update.json",
                       params=params)
示例#11
0
 def response(self, parts):
     markov = Markov()
     keyword = next((w for w, p in parts if is_keyword(p)), '')
     response = markov.generate(keyword)
     return response
示例#12
0
class TestMarkovClass(unittest.TestCase):
    """
    Test that the Markov wrapper class behaves as expected
    """
    def setUp(self):
        self.markov = Markov(prefix="testclass", db=11)

    def test_add_line_to_index(self):
        line = ['i', 'ate', 'a', 'peach']
        line1 = ['i', 'ate', 'one', 'peach']
        line2 = ['i', 'ate', 'a', 'sandwich']

        self.markov.add_line_to_index(line)
        self.markov.add_line_to_index(line1)
        self.markov.add_line_to_index(line2)
        self.assertEqual(self.markov.client.zscore("testclass:i:ate", "a"),
                         2.0)
        self.assertEqual(self.markov.client.zscore("testclass:ate:a", "peach"),
                         1.0)

    def test_score_for_line(self):
        self.test_add_line_to_index()
        line = ['i', 'ate', 'a', 'peach']
        self.assertEqual(self.markov.score_for_line(line), 100)

    def test_generate(self):
        self.test_add_line_to_index()
        generated = self.markov.generate(max_words=3)
        assert len(generated) >= 2
        assert len(generated) <= 3
        generated = self.markov.generate(seed=['ate', 'one'], max_words=3)
        assert 'peach' in generated
        assert 'sandwich' not in generated

    def test_flush(self):
        m1 = Markov(prefix="one", db=5)
        m2 = Markov(prefix="two", db=5)

        line = ['i', 'ate', 'a', 'peach']
        line1 = ['i', 'ate', 'one', 'peach']
        line2 = ['i', 'ate', 'a', 'sandwich']

        m1.add_line_to_index(line)
        m1.add_line_to_index(line1)
        m1.add_line_to_index(line2)

        important_line = ['we', 'all', 'have', 'phones']

        m2.add_line_to_index(important_line)

        r = redis.Redis(db=5)
        assert len(r.keys("one:*")) == 6
        assert len(r.keys("two:*")) == 3

        m1.flush(prefix="one")

        assert len(r.keys("one:*")) == 0
        assert len(r.keys("two:*")) == 3

        m2.flush(prefix="two")

        assert len(r.keys("one:*")) == 0
        assert len(r.keys("two:*")) == 0

    def tearDown(self):
        """
        clean up our redis keys
        """
        keys = self.markov.client.keys(self.markov.prefix + "*")
        for key in keys:
            self.markov.client.delete(key)
示例#13
0
                 send(str(random.randint(fd, sd)), '', event.chat_id)
             else:
                 send('Хочешь наебать меня, дешёвка?', '',
                      event.chat_id)
         else:
             send('Хочешь наебать меня, дешёвка?', '', event.chat_id)
 elif (newMessageLower[:12] == "мойша марков"):
     n = newMessageLower[13:]
     if n.isdigit():
         n = int(n)
         if (n < 1) or (n > 9):
             send('Неверный размер окна, иди нахуй, дешёвка', '',
                  event.chat_id)
         else:
             moysha = Markov('dict', n)
             answer = moysha.generate(n)
             send(answer, '', event.chat_id)
     else:
         moysha = Markov('dict', 4)
         answer = moysha.generate(query=newMessageLower[13:])
         send(
             '> ' + newMessageLower[13:].capitalize() + '\n> ' + answer,
             '', event.chat_id)
 elif (random.randint(0, 10) <= -3) and (newMessageLower[-1] == '?'):
     send('Мойша услышал Ваш вопрос... Мойша думает...', '',
          event.chat_id)
     moysha = Markov('dict', 4)
     answer = moysha.generate(query=newMessageLower[:-1])
     send('> ' + newMessageLower.capitalize() + '\n> ' + answer, '',
          event.chat_id)
 elif (newMessageLower[:9] == "расшифруй"):  # Расшифровка
示例#14
0
class TestMarkovClass(unittest.TestCase):
    """
    Test that the Markov wrapper class behaves as expected
    """
    def setUp(self):
        self.markov = Markov(prefix="testclass", db=11)

    def test_add_line_to_index(self):
        line =  ['i','ate','a','peach']
        line1 = ['i','ate','one','peach']
        line2 = ['i','ate','a', 'sandwich']

        self.markov.add_line_to_index(line)
        self.markov.add_line_to_index(line1)
        self.markov.add_line_to_index(line2)
        self.assertEqual(self.markov.client.zscore("testclass:i:ate", "a"), 2.0)
        self.assertEqual(self.markov.client.zscore("testclass:ate:a", "peach"), 1.0)
                
    def test_score_for_line(self):
        self.test_add_line_to_index()
        line = ['i','ate','a','peach']
        self.assertEqual(self.markov.score_for_line(line), 100)
       
        
    def test_generate(self):
        self.test_add_line_to_index()
        generated = self.markov.generate(max_words=3)
        assert len(generated) >= 2
        assert len(generated) <= 3
        generated = self.markov.generate(seed=['ate','one'], max_words=3)
        assert 'peach' in generated 
        assert 'sandwich' not in generated

    def test_flush(self):
        m1 = Markov(prefix="one", db=5)
        m2 = Markov(prefix="two", db=5)

        line =  ['i','ate','a','peach']
        line1 = ['i','ate','one','peach']
        line2 = ['i','ate','a', 'sandwich']

        m1.add_line_to_index(line)
        m1.add_line_to_index(line1)
        m1.add_line_to_index(line2)

        important_line =  ['we', 'all', 'have', 'phones']

        m2.add_line_to_index(important_line)

        r = redis.Redis(db=5)
        assert len(r.keys("one:*")) == 6
        assert len(r.keys("two:*")) == 3

        m1.flush(prefix="one")

        assert len(r.keys("one:*")) == 0
        assert len(r.keys("two:*")) == 3

        m2.flush(prefix="two")

        assert len(r.keys("one:*")) == 0
        assert len(r.keys("two:*")) == 0        
        
    def tearDown(self):
        """
        clean up our redis keys
        """
        keys = self.markov.client.keys(self.markov.prefix+"*")
        for key in keys:
            self.markov.client.delete(key)
示例#15
0
def make_tweet(target):
	target_data = Markov(target)

	output_tweet = target_data.generate(max_words=10)
	return output_tweet