前提・実現したいこと
読み込みや書き込み、その際の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>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/09 04:02
2020/04/09 05:14
2020/04/09 05:16
2020/04/09 06:54