Guest User

Untitled

a guest
Mar 8th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.84 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. import MeCab
  3. import random
  4. import re
  5. from collections import defaultdict
  6.  
  7. # 所感
  8. # 句点数で終了かどうかの合図としたけどツイッターに句点つけて投稿する律儀な人ってあんまいなくないですか
  9.  
  10. class MarkovChain:
  11. def isalnum(self,s):
  12. return self.alnumReg.match(s) is not None
  13.  
  14. def __init__(self,sentence, maxn=512):
  15. self.alnumReg = re.compile(r'^[a-zA-Z0-9]+$')
  16. self.sentence=sentence
  17. self.pre=''
  18. self.head=[]
  19. self.maxn=maxn
  20.  
  21. def convertWakati(self,sentence):
  22. mecab = MeCab.Tagger("-Owakati")
  23. return mecab.parse(str(sentence))
  24.  
  25. def makeWakatiText(self,sentence):
  26. wakati = self.convertWakati(sentence)
  27. self.kutenNum=wakati.count('。')
  28. words = wakati.split(' ')
  29. words.append('\n')
  30. return words
  31.  
  32. def buildTable(self,words):
  33. markov=defaultdict(list)
  34. for word in words:
  35. if not self.pre:
  36. self.pre = word
  37. self.head.append(word)
  38. else:
  39. markov[self.pre].append(word)
  40. self.pre = word
  41. return markov
  42.  
  43. def buildSentence(self, table):
  44. result = self.pre = random.choice(self.head)
  45. kuten = 0
  46. for _ in range(0,int(self.maxn)):
  47. self.pre = random.choice(table[self.pre])
  48. if self.pre == '\n':
  49. break
  50. if self.isalnum(self.pre):
  51. result +=(self.pre + ' ')
  52. else:
  53. result += self.pre
  54. if self.pre == '。':
  55. kuten += 1
  56. if kuten == self.kutenNum:
  57. break
  58. return result
  59.  
  60. def makeMarkovText(self):
  61. if self.sentence == '':
  62. return '生成できなかったよ'
  63. text = re.sub(r'(\n| |\s)','',self.sentence)
  64. words = self.makeWakatiText(text)
  65. table = self.buildTable(words)
  66. text = self.buildSentence(table)
  67. self.kutenNum = 0
  68. self.pre = ''
  69. self.head = []
  70. return text
  71.  
  72.  
  73.  
  74. if __name__=='__main__':
  75. txt = """日本国民は、正当に選挙された国会における代表者を通じて行動し、
  76. われらとわれらの子孫のために、諸国民との協和による成果と、
  77. わが国全土にわたつて自由のもたらす恵沢を確保し、
  78. 政府の行為によつて再び戦争の惨禍が起ることのないやうにすることを決意し、
  79. ここに主権が国民に存することを宣言し、この憲法を確定する。
  80. そもそも国政は、国民の厳粛な信託によるものであつて、その権威は国民に由来し、
  81. その権力は国民の代表者がこれを行使し、その福利は国民がこれを享受する。
  82. これは人類普遍の原理であり、この憲法は、かかる原理に基くものである。
  83. われらは、これに反する一切の憲法、法令及び詔勅を排除する。
  84. 日本国民は、恒久の平和を念願し、人間相互の関係を支配する崇高な理想を深く自覚するのであつて、
  85. 平和を愛する諸国民の公正と信義に信頼して、われらの安全と生存を保持しようと決意した。
  86. われらは、平和を維持し、専制と隷従、圧迫と偏狭を地上から永遠に除去しようと努めてゐる国際社会において、
  87. 名誉ある地位を占めたいと思ふ。われらは、全世界の国民が、ひとしく恐怖と欠乏から免かれ、
  88. 平和のうちに生存する権利を有することを確認する。
  89. われらは、いづれの国家も、自国のことのみに専念して他国を無視してはならないのであつて、
  90. 政治道徳の法則は、普遍的なものであり、この法則に従ふことは、自国の主権を維持し、
  91. 他国と対等関係に立たうとする各国の責務であると信ずる。
  92. 日本国民は、国家の名誉にかけ、全力をあげてこの崇高な理想と目的を達成することを誓ふ。"""
  93. m1 = MarkovChain(txt)
  94. print(m1.makeMarkovText())
Add Comment
Please, Sign In to add comment