Möchten Sie Ihre Fluchtschande selbst analysieren?

Vorwort

Hallo, dies ist ein weiterer Neuling. Dies ist eine Fortsetzung von Letztes Mal.

Wenn ich das letzte Mal nur Mecab verwendet hätte, würde es nicht funktionieren, und als ich es der Welt so wie es war aus allen Richtungen (Qiita, Twitter und fast allen Richtungen) enthüllte, "Ich denke, Sie können nur das IPA-Wörterbuch auf Japanisch verwenden, verwenden Sie NEologd". Danke fürs Fliegen ~~ Face ~~ Ich habe es von vorne genommen.

Ich habe auch versucht, "elasticsearch-analysis-kuromoji" zu verwenden, das Japanisch mit dem Elasticsearch-Plugin analysieren kann.

Eindrücke zum Zeitpunkt der Empfängnis (verbaler Ton)

――NEologd scheint moderne Sprachen zu unterstützen, aber wie weit wird es auf Twitter funktionieren, wo neue Wörter, die gerade erst populär werden, weit verbreitet sind? ―― Es scheint, dass Kuromoji in Japanisch unterteilt werden kann, aber wie modern ist es? Ich bin mir nicht sicher, wie ich Risse und Hash-Tags loswerden soll.

Umgebung

Weitere Informationen finden Sie unter Letztes Mal.

Hat funktioniert

-Installation von NEologd

Ich werde es aus Github ziehen.

$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git

So erhalten Sie das Update:

$ ./bin/install-mecab-ipadic-neologd -n

Suchen Sie den Speicherort, an dem NEologd installiert ist, mit dem folgenden Befehl:

$ echo `mecab-config --dicdir`"/mecab-ipadic-neologd"

Die Verwendung wird im Python-Code vorgestellt.

-Installieren Sie elasticsearch-analysis-kuromoji

Gehen Sie an dem Ort, an dem Elasticsearch installiert ist ($ ES_HOME), wie folgt vor:

$ sudo bin/elasticsearch-plugin install analysis-kuromoji

Dieses Mal werden wir das Feld "Text" analysieren. Senden Sie daher die folgende Vorlage. (Natürlich nach dem Start von Elasticsearch.)

curl -XPUT --user elastic:changeme localhost:9200/_template/text_analysis?pretty -d '{
  "template": "twitter-*",
  "settings": {
    "analysis": {
      "tokenizer": {
        "kuromoji_user_dict": {
          "type": "kuromoji_tokenizer",
          "mode": "normal"
        }
      }
    }
  },
  "mappings": {
    "twitter": {
      "properties": {
        "text": {
            "type": "text",
            "fielddata": true,
            "analyzer": "kuromoji",
          "fields": {
            "keyword": {
              "type": "keyword"
            }
          }
        }
      }
    }
  }
}'

--user elastic: changeme ist das Werfen von Locken nach der Installation von x-pack. Übrigens "Benutzername = elastisch" und "Passwort = ändern". (Es tut mir leid, dass ich mein Passwort noch nicht geändert habe.)

Informationen zur Verwendung der Twitter-API finden Sie unter Letztes Mal.

search.py


#!/usr/bin/env python                                                                                                                                                                                           
# -*- coding: utf-8 -*-                                                                                                                                                                                         

from requests_oauthlib import OAuth1Session
import json
import MeCab

CK = '***********'
CS = '***********'
AT = '***********'
AS = '***********'

url = "https://api.twitter.com/1.1/search/tweets.json"

#here can be set ID of tweet (ordered by time), and number of tweets (default is 20, max 200)                                                                                                                   
params = {'q':'#Entkomme der Schande', 'count':'200'}

# GET request                                                                                                                                                                                                   
twitter = OAuth1Session(CK, CS, AT, AS)
req = twitter.get(url, params = params)

f = open("json/search_nigehaji.json","a")

if req.status_code == 200:
    timeline = json.loads(req.text)
    print(timeline)
    for tweet in timeline["statuses"]:
        word_array = []
        mecab_combo = [[] for j in range(3)]
        word_combo = []
        print(tweet)
        for word in tweet["text"].split(" "):
            word_array.append(word)
            print(word)
            if (not word.startswith('http')) and (not word.startswith('@')) and (word != 'RT'):
                tagger = MeCab.Tagger(' -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')
                text_str = word.encode('utf-8')
                node = tagger.parseToNode(text_str)
                mecab_array_noun = [];mecab_array_verb = []
                while node:
                    mecab_word = node.surface.decode("utf-8")
                    pos = node.feature.split(",")[0]
                    mecab_combo[0].append(pos)
                    mecab_combo[1].append(mecab_word)
                    mecab_combo[2].append(node.feature.split(",")[6])
                    if pos == "Substantiv":
                        mecab_array_noun.append(mecab_word)
                        print(pos)
                        print(mecab_word)
                    elif pos == "Verb":
                        mecab_array_verb.append(mecab_word)
                        print(pos)
                        print(mecab_word)
                        print(node.feature.split(",")[6])
                    node = node.next
                    print(mecab_combo)
        print("###########")
        print(len(mecab_combo[0]))
        for i in xrange(0, len(mecab_combo[0])):
            print("########################################")
            print(mecab_combo[0][i])
            stage_count = 0
            if mecab_combo[0][i] == "Substantiv":
                print("start for")
                l = []
                for j in xrange(i, len(mecab_combo[0])):
                    print(mecab_combo[1][j])
                    if mecab_combo[0][j] == "Substantiv":
                        l.append(mecab_combo[1][j])
                        word_combo.append(''.join(l))
                        print(''.join(l))
                    elif mecab_combo[0][j] in ["Partikel", "Hilfsverb", "Verb"]:
                        if stage_count != 0:
                            break
                        l.append(mecab_combo[1][j])
                        word_combo.append(''.join(l))
                        stage_count += 1
                        print(''.join(l))
                    else:
                        print(''.join(l))
                        print("end")
                        break
            if mecab_combo[0][i] == "Verb":
                print("start for")
                l = []
                for j in xrange(i, len(mecab_combo[0])):
                    print(mecab_combo[1][j])
                    if mecab_combo[0][j] == "Verb":
                        l.append(mecab_combo[1][j])
                        word_combo.append(''.join(l))
                        print(''.join(l))
                    elif mecab_combo[0][j] in ["Adjektiv", "Partikel"]:
                        l.append(mecab_combo[1][j])
                        word_combo.append(''.join(l))
                        print(''.join(l))
                        print("end")
                        break
                    else:
                        print(''.join(l))
                        print("end")
                        break
            print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
        #injection                                                                                                                                                                                              
        tweet['words']=word_array;tweet['mecab_noun']=mecab_array_noun;tweet['mecab_verb']=mecab_array_verb;tweet['word_combo']=word_combo
        json.dump(tweet, f)
        f.write('\n')
else:
    print("Error: %d" % req.status_codea)

Der Unterschied zu Letztes Mal besteht darin, dass NEologd zuerst angewendet wurde.

search.py


tagger = MeCab.Tagger(' -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')

Danach entfernte ich unter Ausnutzung der Reflexion von vorherige auch URL-Links (beginnend mit http), Antworten (beginnend mit @) und RT. Aber

Der größte Teil ist die Sammlung von Nomenklatur + Nomenklatur + ... und Nomenklatur + Assistenten + Nomenklatur! Ich habe versucht, die Trefferwörter aufzunehmen. Sie können beliebig viele Muster hinzufügen. Damit zum Beispiel ...

Hoshino Gen

Monday's Wow

Ergebnis

Ich umarme gerade die beste Szene der letzten Folge ... lass es in Ruhe. ..

スクリーンショット 2016-12-20 23.20.44.png

Ich finde die Ergebnisse ziemlich gut! Verwenden Sie für andere Diagramme zur Analyse der Fluchtscham als Hash-Tags "Erweitert" -> "Muster ausschließen" von "X-Achse".

.*https.*|\#.*|Entkomme der Schande|.|..

Angegeben. Bei der japanischen Analyse können Sie sich Charaktere, Schauspieler und Szenen sowohl in Kuromoji als auch in Mecab vorstellen (Nomenanalyse). Wenn Sie nicht genug tun möchten, um Python zu beißen, ist es Kuromoji.

Und in der Hit-Wort-Analyse scheint jeder die Zeilen so zu murmeln, wie sie sind ...

Das beste hübsch

Und

Freie Arbeit

Und

Die guten Absichten der Menschen

Und

15 Minuten Erweiterung

Etwas ist in eingestuft.

Ich habe es nicht gesehen, seit ich nur 2 Folgen gesehen habe, und ich habe nur die ersten und letzten 5 Minuten in der letzten Folge gesehen, also Ich weiß nicht, was diese Schlüsselwörter sind, aber ich bin sicher, dass es eine solche Zeile gab (eine Person)

Lass uns ins Bett gehen. Diese Szene war zu stark für mich ...

Recommended Posts

Möchten Sie Ihre Fluchtschande selbst analysieren?
Möchten Sie einen Twitter-Lebenslauf erstellen?
[Rekrutierung] Möchten Sie Programmierkenntnisse austauschen?
Schön Sie kennenzulernen, ich möchte mich vorstellen.
Ich würde gerne etwas über Django Page Nation erfahren