Jetzt, da Google Reader vorbei ist und Dienste wie SmartNews und Gunosy, die empfohlene Inhalte auch im Schlaf anbieten, Aufmerksamkeit erregen, möchte ich hier etwas Kluges machen.
Also zog ich einen Artikel aus einem beliebten Eintrag in Hateb, Ich habe ein Programm geschrieben, um es in einer Zeile zusammenzufassen.
Ja das.
Zusammenfassung http://xiidec.appspot.com/markov.html
Wenn Sie dies verwenden ...
Die Wahrheit Japans ist, dass der faule Katzenlöwe den Elitekurs in diesem Land fahren kann.
So was
Was tun mit der Geschichte, Produktivität zu wollen, warum hochqualifizierte diskriminierende Bemerkungen erforderlich sind?
Die Nachrichten zum Thema sind gemischt und in einer Zeile zusammengefasst.
In Bezug auf Ayumi Hamasaki erreichte der Reaktor nicht genug, und diskriminierende Bemerkungen zum Kernschmelzen wurden fortgesetzt.
Sie können den aktuellen Status des Web in einer Zeile sehen!
Es ist fast so.
Ich miete einen (kostenlosen) Google App Engine-Server und führe ihn aus. Der Mechanismus zum Abrufen von Futtermitteln ist fast der gleiche wie bei Futtermittelparser nimmt automatisch Katzenbilder auf. Geben Sie es an den Kunden weiter.
Der Client zerlegt dann die empfangene Zeichenfolge mit einer magischen Javascript-Bibliothek namens TinySegmenter in Wörter.
Heute ist ein schöner Tag. ↓ heute|Ist|gut|Wetter|ist|Hallo|。
Ein solches Bild.
Und es wird unter Verwendung eines Algorithmus namens Markov-Kette rekonstruiert. Weitere Informationen finden Sie in den [Markov-Kettenartikeln] von Wikipedia (http://en.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%82%B3%E3%83%95%E9%) Ich glaube nicht, dass Sie es sehr gut verstehen können, wenn Sie 80% A3% E9% 8E% 96) lesen, aber wenn Sie es grob erklären,
Heute → ist → gut → Wetter → ist → ne →. I → ist → Katze → ist → ist →. → Name → → Noch nicht → Nicht verfügbar →. Übergabe → → → Keine Waffe → → Kind → → Herum → Von → Verlust → Nur →.
Angenommen, es gibt mehrere Sätze.
Zunächst wird das erste Wort zufällig abgerufen. → "Heute" Das einzige Wort, das "heute" folgt, ist "ha". → "Heute" Die Wörter nach "ha" sind "gut" und "Katze". Wählen Sie zufällig. → "Heute ist eine Katze" Das einzige Wort, das einer Katze folgt, ist "de". → "Heute ist eine Katze" Die Wörter nach "de" sind "aru" und "Kinder". Wählen Sie auch nach dem Zufallsprinzip. → "Heute ist eine Katze und ein Kind" Neben "Kinder" ist eine andere Wahl. → "Heute ist eine Katze und ein Kind" Neben "nein" stehen "keine Waffe" und "herum". → "Heute ist eine Katze und eine Kinderwaffe" Neben "Muteppou" wird erneut "de" ausgewählt. → "Heute ist eine Waffe für eine Katze und ein Kind ohne Waffe" Lass es uns beenden. → "Heute ist eine Katze und eine Kinderwaffe."
Es stellte sich heraus, dass es so etwas war. Die Markov-Kette ist tatsächlich etwas tiefer. Eine schwierige Formel kommt heraus. Was auch immer die Theorie sein mag, hoffen wir, dass es dadurch so wird.
Dies ist die Quelle auf der Serverseite.
markov.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import webapp2
import os
from google.appengine.ext.webapp import template
from xml.etree.ElementTree import *
import re
import urllib
class Markov(webapp2.RequestHandler):
def get(self):
mes=""
if self.request.get('mode')=="2ch":
mes=self.get_2ch()
else:
mes=self.get_hotentry_title()
template_values={
'mes':mes
}
path = os.path.join(os.path.dirname(__file__), 'html/markov.html')
self.response.out.write(template.render(path, template_values))
def get_hotentry_title(self):
titles = ""
tree = parse(urllib.urlopen('http://feeds.feedburner.com/hatena/b/hotentry'))
for i in tree.findall('./{http://purl.org/rss/1.0/}item'):
titles+= re.sub("[-:|/|:].{1,30}$","",i.find('{http://purl.org/rss/1.0/}title').text) + "\n"
return titles
def get_2ch(self):
titles = ""
response = urllib.urlopen('http://engawa.2ch.net/poverty/subject.txt')
html = unicode(response.read(), "cp932", 'ignore').encode("utf-8")
for line in html.split("\n"):
if line != "":
titles+=re.sub("\(.*?\)$","",line.split("<>", 2)[1])+ "\n"
return titles
app = webapp2.WSGIApplication([
('/markov.html', Markov)
], debug=True)
Die get-Methode der Markov-Klasse ist die Methode, die funktioniert, wenn der Benutzer darauf zugreift. get_hotentry_title () ruft eine Liste beliebter Einträge ab und übergibt sie an markov.html. ElementTree wird verwendet, um RSS zu erhalten. Es schien ein Problem zu sein, Feedparser für GAE zu verwenden.
get_2ch () ist eine zusätzliche Funktion. Ich werde den Faden von 2ch anstelle des Eingangs des Endes aufheben. Fügen Sie am Ende der URL "? Mode = 2ch" hinzu, um den 2ch-Modus zu erhalten. Wenn Sie die Funktion zum Ändern der abgerufenen Informationen gemäß den folgenden Parametern erweitern, wird sich Ihr Traum ausbreiten.
re.sub("[-:|/|:].{1,30}$”,””,~~~)
Diese mysteriöse Beschreibung heißt re. Dadurch werden unnötige Geräusche vermieden.
Nur ein klarer Weg, um select ◯◯ 100 Auswahlen-XX Blog zu machen
Löschen Sie das "-XX-Blog" mit einem solchen Titel, um es einfach zu machen.
Als nächstes kommt die Client-Seite.
markov.html
<html>
<head>
</head>
<body style="">
<p> </p>
<p>
<meta charset="UTF-8">
<title>Zusammenfassung-Kun</title>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js"></script>
<script type="text/javascript" src="jscss/tiny_segmenter-0.1.js" charset="UTF-8">
</script> <script type="text/javascript">
var segmenter
$(function(){
segmenter = new TinySegmenter();//Instanzgenerierung
})
//Lauf
function doAction(){
var wkIn=$("#txtIN").val()//Eingang
var segs = segmenter.segment(wkIn); //Gibt ein Array von Wörtern zurück
var dict=makeDic(wkIn)
var wkbest=doShuffle(dict);
for(var i=0;i<=10;i++){
wkOut=doShuffle(dict).replace(/\n/g,"");
if(Math.abs(40-wkOut.length)<Math.abs(40-wkbest.length)){
wkbest=wkOut
}
}
$("#txtOUT").val(wkbest);//Ausgabe
}
//Mische Sätze
function doShuffle(wkDic){
var wkNowWord=""
var wkStr=""
wkNowWord=wkDic["_BOS_"][Math.floor( Math.random() * wkDic["_BOS_"].length )];
wkStr+=wkNowWord;
while(wkNowWord != "_EOS_"){
wkNowWord=wkDic[wkNowWord][Math.floor( Math.random() * wkDic[wkNowWord].length )];
wkStr+=wkNowWord;
}
wkStr=wkStr.replace(/_EOS_$/,"。")
return wkStr;
}
//Zum Wörterbuch hinzufügen
function makeDic(wkStr){
wkStr=nonoise(wkStr);
var wkLines= wkStr.split("。");
var wkDict=new Object();
for(var i =0;i<=wkLines.length-1;i++){
var wkWords=segmenter.segment(wkLines[i]);
if(! wkDict["_BOS_"] ){wkDict["_BOS_"]=new Array();}
if(wkWords[0]){wkDict["_BOS_"].push(wkWords[0])};//Satzanfang
for(var w=0;w<=wkWords.length-1;w++){
var wkNowWord=wkWords[w];//Nun Wort
var wkNextWord=wkWords[w+1];//Nächstes Wort
if(wkNextWord==undefined){//Ende des Satzes
wkNextWord="_EOS_"
}
if(! wkDict[wkNowWord] ){
wkDict[wkNowWord]=new Array();
}
wkDict[wkNowWord].push(wkNextWord);
if(wkNowWord=="、"){//"," Kann als Satzanfang verwendet werden.
wkDict["_BOS_"].push(wkNextWord);
}
}
}
return wkDict;
}
//Geräuschreduzierung
function nonoise(wkStr){
wkStr=wkStr.replace(/\n/g,"。");
wkStr=wkStr.replace(/[\?\!?!]/g,"。");
wkStr=wkStr.replace(/[-||:: ・]/g,"。");
wkStr=wkStr.replace(/[「」()\(\)\[\]【】]/g," ");
return wkStr;
}
</script> </meta>
<div data-role="page" id="first">
<div data-role="content">
<p>Um die aktuellen Artikel im Internet in einer Zeile zusammenzufassen ...</p>
<p><textarea cols="60" rows="8" name="txtIN" id="txtIN" style="max-height:200px;">{{ mes }}</textarea></p>
<input type="button" name="" value="Generieren" onClick=" doAction()"></br>
<textarea cols="60" rows="8" name="txtIN" id="txtOUT"></textarea>
<p></p>
</div>
</div>
</body>
</html>
Wow vermasselt. Erstens, doAction (), ist dies die Hauptfunktion. Die von segmenter.segment (wkIN) empfangene Zeichenkette wird in Teile zerlegt. Erstellen Sie darauf basierend ein Wörterbuch mit Satzverbindungen mit makeDic (). Mischen Sie es danach 10 Mal mit doShuffle () und übernehmen Sie die Zeichenfolge, die 40 Zeichen am nächsten kommt.
Komplett.
Es scheint, dass verschiedene Verbesserungen vorgenommen werden können, indem die aus dem Web abgerufenen Informationen oder die Bewertungskriterien für gemischte Sätze nach Ihren Wünschen geändert werden.
Nicht sehr praktisch.
Recommended Posts