@Blog{zip358.com}
日常日誌からプログラムやYOUTUBER紹介、旅日記まで日々更新中です。
文章を解析して#を付与して返却。
2024.03.04
おはようございます、文章を解析して#を付与して返却…Qiitaの丸コピです。
SNSでの使用することを考えて作りました。文章を解析して名詞と形容詞の文字の先頭に#を付与して返却します😌。
レンタルサーバーでは動きませんがawsやgcp,vpsなどでは動く作りになっています。
作った経緯はこういうサービスが無かったので作りました?。
因みにexecの脆弱性が気になるところですので対応が必要かもです🙇。
※phpやPythonのインストールはご自身で行ってください。
#前処理 mecab-python3バージョンは1.0.8です
sudo apt-get install mecab libmecab-dev mecab-ipadic-utf8
sudo pip install mecab-python3
pip install unidic-lite
<?php
class sharpPost
{
/**
* mecab.pyを使って文章を解析(名詞と形容詞を取り出す)
* @param $posstData
* @return array|null
*/
public function analysis($postData)
{
if(!$postData)return null;
$word = null;
exec('python py/mecab.py "'.strip_tags(htmlentities($postData)).'"',$output);// 2>&1
if(is_array($output)){
foreach($output as $val){
$analysisWord = explode("\t",$val);
if(isset($analysisWord[1]) && preg_match('/(名詞|形容詞)/',$analysisWord[1])){
$word[] = $analysisWord[0];
$word = array_unique($word);
}
}
}
return $word;
}
/**
* 文字列を置き換える処理
* @param $postData
* @param $word|null
* @return string
*/
public function replacePostData($postData='',$word=null)
{
if(is_array($word)){
foreach($word as $val){
$postData = preg_replace("/({$val})/u"," #{$val} ",$postData);
}
}
return $postData;
}
}
$textData = '単なる自分が使いたい機能です、無かったので作ってみただけです。';
$sharpPost = new sharpPost();
$word = $sharpPost->analysis($textData);
print(($sharpPost->replacePostData($textData,$word)).PHP_EOL);
import MeCab
import sys
args = sys.argv
if(args[1]):
tagger = MeCab.Tagger()
print(tagger.parse(args[1]))
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
analysis, args, argv if, AWS, exec, explode, foreach, htmlentities, isset, PARAM, preg_match, preg_replace, print, qiita, quot, replacePostData, return, sharpPost, tagger, tagger.parse,
Pythonコード:demo
2019.11.05
#!/usr/local/bin/python3
# coding:utf-8
import os
import sys
import MeCab
import gensim
import markovify
import unicodedata
model = gensim.models.KeyedVectors.load_word2vec_format('/var/www/html/model.vec', binary=False)
f = open('merosu.txt')
tagger = MeCab.Tagger("-Owakati")
tagger.parse('')
text0 = tagger.parse(f.read())
text1 = text0
text0 = text0.replace('\n','')
text0 = text0.replace('\r','')
text1x = text0.split(" ")
text2 = []
try:
for item in text1x:
if item.strip():
results = model.most_similar(positive=[item],topn=2)
#"print(results)
for val1 in results:
text2.append(val1[0] + "\n")
#
# print (text1)
# print (" ".join(text2))
model_a = markovify.Text(text1 + "\n")
print(str(model_a.make_sentence()).replace(' ',''))
model_b = markovify.Text(" ".join(text2))
print(str(model_b.make_sentence()).replace(' ',''))
model_combo = markovify.combine([model_a, model_b], [1, 1])
print(str(model_combo.make_sentence()).replace(' ',''))
except Exception as e:
print("動作エラー", e.args)
pass
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
-Owakati, 'merosu, 0, 1, 2, 3, 39, 8, bin, binary, coding, demo, false, format, gensim, html, import, KeyedVectors, load, local, markovify, Mecab, model, models, open, OS, parse, Python, quot, read, replace, sys, tagger, Text, txt, unicodedata, usr, UTF-, var, Vec, Word, コード,