
多数の多言語コンテンツを高品質で処理する必要があるプロジェクトでは、適切な文法チェックなしで行うことはほとんど不可能です。 特定の言語の各モジュールを自分で書くには、多くの時間とお金がかかります。 さらに、言語に精通し、言語学者であると同時に、言語と数式を関連付ける必要があります。 タスクは簡単ではありません。 この場合、効果的な方法は、既製のソリューションを取得してアプリケーションに統合することです。 この記事では、Open Officeのツールを使用して簡単にこれを行う方法について説明します。
まず、OOの文法パッケージが実際に何を構成しているかを把握しましょう。 例として、ロシア語の文法ファイルを分析します。 OOサイトから、言語文法パッケージを含むアーカイブをダウンロードします。 アーカイブ内には、readme.txt、ru_RU.dic、ru_RU.affの3つのファイルがあります。 Readmeを使用すると、すべてが明確になります-必要に応じて読むことができます。 拡張子がdicのファイル-ロシア語で見つかった単語を含む辞書です。 当然、すべての単語がそこにあるわけではなく、それを補充する必要があります。 拡張子がAFFの2番目のファイルは、文法ファイルです。 このファイルの形式は、MySpellまたはAspellのいずれかです。 いずれにせよ、それは私たちのモジュールに適しています。
これらのファイルの形式がわかったので、モジュール自体に取り掛かりましょう。 そのためには、記事の下部にあるリンクにあるHunspell APIが必要です。 APIは別の開発者によって作成され、最も原始的な文法チェッカーに適しています。 Javaで記述します。 テストでは、単語をパラメーターとして受け取り、それをチェックし、単語のスペルが間違っている場合は修正された結果を返す単純なサーブレットを作成します。 Java環境でWEBアプリケーションを作成する方法について多くの記事が書かれているため、これについては詳しく説明しません。 最も重要なことからすぐに始めましょう。 入力フィールドとボタンで構成される小さなフォームを作成してみましょう。
<html>
<head>
<meta http-equiv = "Content-Type" content = "text / html; charset = UTF-8">
<title> JSPページ</ title>
</ head>
<本体>
<form method = "POST" action = "http:// localhost:8080 / SpellChecker / spellChecker">
<input type = "text" name = "input" />
<input type = "submit" name = "submit" />
</ form>
</ body>
</ html>
それでは、サーブレット自体を実行しましょう。 サーブレットでは、フォームからデータを受信し、Hunspellライブラリに送信し、応答を処理して、フォームに送り返します。 これを行うメソッドを検討してください。
1.保護されたvoid processRequest(HttpServletRequestリクエスト、HttpServletResponseレスポンス)
2. ServletException、IOExceptionをスローします{
3. response.setContentType( "text / html; charset = UTF-8");
4. PrintWriter out = response.getWriter();
5. {
6. String input = request.getParameter( "input");
7. List <String> list = check(入力);
8. request.setAttribute(「出力」、リスト);
9.イテレーターiter = list.iterator();
10. while(iter.hasNext()){
11. out.println((String)iter.next());
12.}
13。
14.}最後に{
15. out.close();
16.}
17.}
段階的にすべてを検討しましょう。
1行と2行は、リクエストを処理する関数を宣言しています。 3行目では、応答として、特殊文字(方言文字)の誤解を避けるために、結果タイプはUTF-8エンコードのHTMLページになるようにします。 次に、4行目で、データを出力するためのコンテナーを初期化し、ストリームを開きます。 ここから楽しみが始まります。 6行目にあるパラメーターには、入力データ、つまり文法をチェックする必要がある単語が含まれています。 後で分析するcheck(String string)関数に渡します。 要するに、この関数はエラーについて単語をチェックし、応答として修正を含むリストを提供すると言います。 その後、修正リスト(行9〜12)を繰り返し処理し、このリストをストリームに表示します。つまり、画面にリストを表示します。 15行目で、ストリームを閉じます。
1. public List <String> check(String input){
2.リスト<String> list = new ArrayList();
3.リスト<String> stemList = new ArrayList();
4. {
5.文字列newInput = "";
6. if(input!= Null){
7. newInput = new String(input.getBytes( "ISO-8859-1")、 "UTF-8");
8.}
9. Hunspell hunspell = Hunspell.getInstance();
10.辞書dict = hunspell.getDictionary( "ru-RU");
11. if(dict.misspelled(newInput)){
12. list = dict.suggest(newInput);
13.} else {
14. list.add(newInput);
15.}
16。
17.} catch(FileNotFoundException ex){
18. Logger.getLogger(spellChecker.class.getName())。Log(Level.SEVERE、null、ex);
19.} catch(UnsupportedEncodingException ex){
20. Logger.getLogger(spellChecker.class.getName())。Log(Level.SEVERE、null、ex);
21.}
22. list.addAll(stemList);
23.リストを返す。
24.}
そして、ここにチェック(文字列)関数自体があります。 2行目と3行目に、2つの新しいリストを作成します。 最初の結果に最終結果を挿入し、2番目を一時バッファーとして使用します。 5-8行目は、辞書がこのエンコーディングのみを理解するため、リクエストをUTF-8でエンコードします。 9行目でHunspellを初期化し、10行目で使用する辞書を示します。 この場合、ロシア語の辞書です。 文法チェックファイル(ru_RU.dic、ru_RU.aff)はプログラムと同じディレクトリにある必要があるため、それらをそこに転送することを忘れないでください。 次(11行目)は、単語のスペルが正しいかどうかのチェックです。 単語の綴りが間違っている場合(11-13)、この単語の正しい綴り方の結果が得られます。 単語のスペルが正しい場合(13〜15)、それを返します。 すべてが非常にシンプルで簡潔です。 行17〜21はエラーハンドラです。 最初の処理(FileNotFoundException)は文法ファイルがない状態になり、2番目の処理(UnsupportedEncodingException)はリクエストをUTF-8でエンコードし、エンコードサポートを処理する関数を参照します。 22行目では、一時バッファー(stemList)から結果(リスト)にすべてを転送し、23行目でそれを返します。
プログラムで使用できるように、AFFファイルとDICファイルをアプリケーションフォルダーに転送する必要があることを再度お知らせします。 これができない場合は、10行目に辞書へのフルパスを指定できます。 拡張子は不要です。
必要に応じて、このサーブレットをXMLを介して通信する小さなサービスに変換できます。 さらに多くのHunspell言語を接続してください。これらの言語は無料で配布され、常に更新されています。 また、次の記事で説明する言語認識ライブラリを接続することもできます。
次に、これらすべてのものを入手できるリンクを紹介します。
Hunspell
API-dren.dk/hunspell.htmlOpenOffice辞書
-wiki.services.openoffice.org/wiki/Dictionariesまた、辞書は開発者のページにあります。 そこで、彼らははるかに「新鮮」です。