質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Lua

Luaは、汎用のスクリプト言語の一つで、 移植性が高く、高速な実行速度などの特徴を持ち 手続き型・オブジェクト指向言語としても利用可能で 関数型言語、データ駆動型の要素も併せ持っている言語です。

Q&A

解決済

1回答

1459閲覧

streamやanalyzerどれをどのタイミングでclose,resetすればいいかを理解したい

k499778

総合スコア599

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Lua

Luaは、汎用のスクリプト言語の一つで、 移植性が高く、高速な実行速度などの特徴を持ち 手続き型・オブジェクト指向言語としても利用可能で 関数型言語、データ駆動型の要素も併せ持っている言語です。

0グッド

0クリップ

投稿2020/04/08 18:45

編集2020/04/08 18:48

前提・実現したいこと

読み込みや書き込み、その際のstreamやanalyzerの

  • どれをどのタイミングでclose,resetすればいいのか?
  • どういう状況判断でclose,resetするのか
  • そもそもなぜclose,resetしなければいけないのか

を理解したいです。

なので、それを解説してくれる方、またはこういう勉強法をすればいいよ!といったことを教えていただきたいです。

該当のソースコード

このコード内でclose,resetしていますが、なぜ、どういった判断で、どれをclose,resetすればいいのか知りたいです。

java

1import java.io.IOException; 2import java.util.Arrays; 3import java.util.List; 4 5import org.apache.lucene.analysis.Analyzer; 6import org.apache.lucene.analysis.TokenStream; 7import org.apache.lucene.analysis.ja.JapaneseAnalyzer; 8import org.apache.lucene.analysis.ja.tokenattributes.ReadingAttribute; 9import org.apache.lucene.analysis.ja.util.ToStringUtil; 10import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; 11import org.apache.lucene.util.Version; 12 13/** 14 * ファイル内の文に形態素解析を適用します。 15 */ 16public class Romanize { 17 18 public static void main(String[] args) { 19 Analyzer analyzer = new JapaneseAnalyzer(Version.LUCENE_47); 20 try { 21 List<String> texts = Arrays 22 .asList("すもももももももものうち。", "メガネは顔の一部です。", 23 "日本経済新聞でモバゲーの記事を読んだ。", 24 "Java, Scala, Groovy, Clojure", 25 "LUCENE、SOLR、Lucene, Solr", 26 "アイウエオカキクケコさしすせそABCXYZ123456", 27 "Lucene is a full-featured text search engine library written in Java."); 28 for (String text : texts) { 29 TokenStream tokenStream = analyzer.tokenStream("", text); 30 try { 31 romanize(tokenStream); 32 } catch (IOException e) { 33 e.printStackTrace(); 34 } finally { 35 tokenStream.close(); //←該当箇所 36 } 37 } 38 } catch (Exception e) { 39 e.printStackTrace(); 40 } finally { 41 analyzer.close(); //←該当箇所 42 } 43 } 44 45 private static void romanize(TokenStream tokenStream) throws IOException { 46 CharTermAttribute charTermAttr = tokenStream 47 .addAttribute(CharTermAttribute.class); 48 ReadingAttribute readingAttr = tokenStream 49 .addAttribute(ReadingAttribute.class); 50 tokenStream.reset(); //←該当箇所 51 while (tokenStream.incrementToken()) { 52 String token = charTermAttr.toString(); 53 String reading = readingAttr.getReading(); 54 String readingRoma = null; 55 if (reading != null) { 56 readingRoma = ToStringUtil.getRomanization(reading); 57 } else if (isHalfWidthAlphanumeric(token)) { 58 readingRoma = token; 59 } else { 60 readingRoma = ToStringUtil.getRomanization(token); 61 } 62 System.out.println("token:" + token + " ,reading:" + reading 63 + " ,readingRoma:" + readingRoma); 64 } 65 } 66 67 private static boolean isHalfWidthAlphanumeric(String text) { 68 if (text == null || text.length() == 0 69 || text.length() != text.getBytes().length) { 70 return false; 71 } 72 return true; 73 } 74 75} 76

試したこと

ネットで「lucene 入門」「close stream Java」などのキーワードで調べています。

補足情報(FW/ツールのバージョンなど)

環境:Ecllipse4.8.0
言語:Java1.7

xml

1<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 5 <groupId>net.comici.jp</groupId> 6 <artifactId>analyzer-sample</artifactId> 7 <version>1.0-SNAPSHOT</version> 8 <packaging>jar</packaging> 9 10 <name>analyzer-sample</name> 11 <url>https://comici.jp</url> 12 13 <properties> 14 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 15 </properties> 16 17 <build> 18 <plugins> 19 <plugin> 20 <groupId>org.apache.maven.plugins</groupId> 21 <artifactId>maven-compiler-plugin</artifactId> 22 <configuration> 23 <source>1.7</source> 24 <target>1.7</target> 25 </configuration> 26 </plugin> 27 <plugin> 28 <groupId>org.codehaus.mojo</groupId> 29 <artifactId>exec-maven-plugin</artifactId> 30 <version>1.3</version> 31 <executions> 32 <execution> 33 <goals> 34 <goal>java</goal> 35 </goals> 36 </execution> 37 </executions> 38 <configuration> 39 <mainClass>net.comici.test.AnalyzerSample</mainClass> 40 </configuration> 41 </plugin> 42 </plugins> 43 </build> 44 45 <dependencies> 46 <dependency> 47 <groupId>org.apache.lucene</groupId> 48 <artifactId>lucene-analyzers-kuromoji</artifactId> 49 <version>4.8.1</version> 50 </dependency> 51 <dependency> 52 <groupId>junit</groupId> 53 <artifactId>junit</artifactId> 54 <version>3.8.1</version> 55 <scope>test</scope> 56 </dependency> 57 </dependencies> 58</project>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

なぜ、どういった判断で、どれをclose,resetすればいいのか

オブジェクトが何か資源を確保・使用していれば, それを解放しなければ, 資源が枯渇して全体の動作に支障をきたす恐れがあります.
ですので, 使用が済み次第極力速やかに開放する必要があります.
大抵は close メソッドがあれば close する必要があると判断できるでしょう.
各クラスのドキュメントを読むのが確実かと思います.

投稿2020/04/09 03:46

編集2020/04/09 05:15
jimbe

総合スコア13209

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k499778

2020/04/09 04:02

回答ありがとうございます。 コレはstreamだからでしょうか? 全てのオブジェクトでcloseしてる記述があるわけではないので。
jimbe

2020/04/09 05:14

「stream だから」という判断基準は回答に入れていません. クラス名は作者が自由に付けられますから, 「クラス名に Stream という文字が付いていれば必ず close する必要があり, 付いていなければ close する必要が無い」とは言えません. ( Analyzer には「 Stream 」は付いていません. ) ですので, 「各オブジェクトのドキュメントを読むのが確実」と申し上げています.
jimbe

2020/04/09 05:16

すいません, 「各オブジェクト」では無く「各クラス」に修正しました.
k499778

2020/04/09 06:54

かしこまりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問