【Python】MeCabにより形態素解析を行い名詞・動詞を抽出する
何をする
MeCabにより日本語文章を分割して特定の品詞情報を抽出する
事前準備
MeCabをインストール
いっぱい参考ページあるので検索下さい
コード
make_word_list.py
import MeCab tagger = MeCab.Tagger("-d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd") # 初期化しないとエラーになる tagger.parse("") # 入力された文章を分解しリスト化する class MakeWordList: def __init__(self): pass # 文字列を単語で分割しリストに格納する def word_tokenaize(self, doc): node = tagger.parseToNode(doc) result = [] while node: hinshi = node.feature.split(",")[0] if hinshi == '名詞' or hinshi == '動詞': result.append(node.feature.split(",")[6]) node = node.next return result
main.py
import MeCab import make_word_list str = input("文字列を入力.-> ") # インスタンスの作成 make_words = make_word_list.MakeWordList() # 入力文を形態素解析後、リスト化 word_list = make_words.word_tokenaize(str) print(word_list)
結果
文字列を入力.->MeCabで形態素解析をする ['MeCab', '形態素解析', 'する']
おわり
【Java】enumでキーからメッセージを取得する
用途
DBには0, 1, 2...みたいに数値で入っているけど画面にはそれぞれの値に対応した文字列を表示したい時ってあるでしょう。
そんな時にenumを使っていい感じにキー値から対応する文字列を取得する方法を記載します。
コード
CodeBase.java
public interface CodeBase { public Short getKey(); public String getMessage(); }
CodeDifinition.java
public class CodeDifinition { public static <T extends Enum<T> & CodeBase> Optional<T> of(Short key, Class<T> enumClass) { return Optional.ofNullable(Stream.of(enumClass.getEnumConstants()) .filter(enums -> enums.getKey() == key) .findFirst() .orElse(null)); } public static <T extends Enum<T> & CodeBase> String toCodeMessage(Optional<T> type) { return type.isPresent() ? type.get().getMessage() : "unknown"; } }
Fruits.java
public enum Fruits implements CodeBase { APPLE((short) 0, "りんご"), ORANGE((short) 1, "オレンジ"), LEMON((short) 2, "レモン"); private Short key; private String message; private Fruits(Short key, String message) { this.key = key; this.message = message; } @Override public Short getKey() { return key; } @Override public String getMessage() { return message; } public static Optional<Fruits> of(Short key) { return CodeDifinition.of(key, Fruits.class); } public static String toMessage(Short key) { final Optional<Fruits> type = Fruits.of(key); return CodeDifinition.toCodeMessage(type); } }
Execute.java
public class Execute { public static void main(String[] args) { final Short num0 = 0; final Short num1 = 1; final Short num2 = 2; final Short num3 = 3; final List<Short> numList = Arrays.asList(num0, num1, num2, num3); final List<String> messageList = numList.stream() .map(num -> Fruits.toMessage(num)) .collect(Collectors.toList()); messageList.forEach(System.out::println); } }
出力結果
りんご オレンジ レモン unknown
他にいい方法あれば教えて頂きたいです。
おわり