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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

5回答

3515閲覧

PHP,MySQLで英単語などを英文から検索したい場合

oka

総合スコア19

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2016/10/01 08:29

編集2016/10/01 15:08

検索するよいキーワードが浮かばないので、ヒントを下さい。

英単語の動詞原形を入力したり、名詞の単数形を入力すると過去形、過去分詞形の動詞や複数形になっている名詞を検索する方法を実現したいと考えております。

like句で検索しようとするもうまくマッチできないと思うのですが、どんな方法を使って検索機能を実装しているのでしょうか。

ライブラリ等があったりするのでしょうか?
fulltext indexでオプション等で設定できたりできるのでしょうか?

なんと検索したらよいのかヒントを下さい。

追記:
とりあえずこんなの見つけました。
不規則動詞の活用一覧

追記:
アルゴリズム的には名詞の場合
1、不規則名詞を先にリストから検索する。
2、結果がNULLだったら、規則名詞と判断
3、if(s,ss,sh,ch,o,xで終わるもの){
esを付け加えて置換
}elseif(子音+yで終わるもの){
最後のyをiに代えてesを付け加えて置換
}elseif(f,feで終わるもの){
f,feをvに代えてesを付け加えて置換
}else{
ただ単にsを付けて置換
}
単数形(そのまま)と上記の処理をしたものを合わせて検索

これと同様に動詞も行う的な感じになるのでしょうか。
動詞、名詞の判断がコンピュータではわからないので、上記名詞と動詞のものを融合させて検索という形になるっぽいかな?

動詞がメンドクサイですね
1、不規則動詞を先にリストから検索する。
2、結果がNULLだったら規則動詞と判断
3、if(正規表現で、eで終わるもの){
//use likeなど
dを付け加えて置換
}elseif(正規表現で、終わりから2個前が子音字+yで終わるもの){
//<子音字+y>で終わる動詞
//studyなど
yをiに代えてedを付け加えて置換
}elseif(正規表現で、終わりから3個前が子音,2個前が母音,最後が子音){
//<短母音+子音字>で終わる動詞
//stopなど
最後の子音を重ねてedを付け加えて置換
}else{
ただ単にedを付け加えて置換
}
原形(そのまま)と上記の処理をしたものを合わせて検索

これらの方法だと抜け落ちている部分があるのであれば、ご一報ください。
追記:見つけました。動詞の三人称単数現在がこれでは検索できないですね。コメント頂いて感謝です。

また、ベストアンサーが決めにくいので、どれがよさそうなのか、記事を見た方々は評価を頂けると幸いです。ちょっと間をおいてみて、一番多いものをベストアンサーに決めたいと思います。

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

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

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

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

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

guest

回答5

0

ベストアンサー

PythonのNodeBox::Linguisticsという自然言語処理のライブラリを使うとすごく簡単にできます。

http://stackoverflow.com/questions/3753021/using-nltk-and-wordnet-how-do-i-convert-simple-tense-verb-into-its-present-pas

PHPでは何かあるのかな?
その部分だけPythonでAPIを作るっていうのはいかがでしょうか?

投稿2016/10/01 18:17

編集2016/10/01 18:29
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

oka

2016/10/01 18:40

これは便利ですね。確かに良さそうです
oka

2016/10/03 12:41

自然言語処理の研究ってよく行われてますから難しいですよね。 了解しました。ぜひ参考にさせてください。
guest

0

具体的な方法は思いつかないですが、やはり英単語の辞書データは外部に頼るのが良いと思いました。

検索時に外部が提供している英単語のAPIを利用するか、
予めそのようなAPIを叩きまくって自DBに、辞書データを蓄積するか、
または、辞書データを何処かから入手してDBに入れておくか、

というところでしょうか。

検討違いの回答でしたらすみません。
英単語辞書API
https://www.wordsapi.com/
https://www.quora.com/What-is-the-best-API-to-pull-all-the-words-in-the-English-dictionary

SQLiteの辞書データ
http://kujirahand.com/web-tools/EJDictFreeDL.php

投稿2016/10/01 14:24

編集2016/10/01 14:26
yetis

総合スコア26

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

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

guest

0

こんにちは。

表題にPHP、MySQLとあるので、 発行するクエリをPHPで組み立てることができることを
前提として、ひとつのアイディアですが、検索の元になる動詞原形に対して、過去形、過去
分詞等の活用形を入手するために、WEB上の辞書をスクレイピングするのはかがでしょうか。

例として、drive を原形の検索ワードとして与えた場合、 過去形の__drove__あるいは__drave__
および、過去分詞の__driven__といった活用形を入手するために、WEBの辞書として
たとえば、Weblioのページ

http://ejje.weblio.jp/content/drive

をPHPのプログラムから取得して、このページの表にある「drive__の変形一覧」の内容を
取得し、適宜パースすれば、この表からは__driving
(現在分詞) drove, drave(過去形)
driven(過去分詞) drives(三人称単数現在)を取得できると思います。

その後、検索対象のテキストに対するSQLを組み立てるときに、WHERE条件として、これら
複数の活用形をORで連結すればよいのではないでしょうか。

以上ご参考になれば幸いです。


追記

動詞原形から活用形を入手する方法について、Stackoverflowで以下の質問がありました。

Is there a database, API, or parsable text for getting verb conjugations?

この質問の回答から行ける、MorphAdornerの、MorphAdorner Server Services: Verb Conjugator Service
というのは、動詞の原形を投げると活用形を希望のフォーマット(XML,JSON,HTML)で返してくれるものっぽいです。(ざっと見ただけなので、違っていたらすみません)

投稿2016/10/01 14:03

編集2016/10/01 14:35
jun68ykt

総合スコア9058

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

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

oka

2016/10/01 14:43

stackoverflowも同時並行で検索しながら見ていますが、自分でも考えている次第です。 多くの方々からコメント頂いて感謝です。
oka

2016/10/01 14:51

確かに動詞の活用を返してくれるとありがたいですね。 名詞もあったらうれしいですね。色々と検索してみます。
guest

0

|動詞原形|動詞過去形|過去分詞形|
| do  | did  | done  |

難しく考えず、関係のある単語をたんに並べた
データ構造にしておいたらダメなんですか?

これはいかにも原始的な方法で、
何かもっと良い設計があるんでしょうけど、
これでは実現不可能な事情でもあるんでしょうか。

もちろん、商業アプリのように、
何十万語もデータを制作するのは大変でしょうが、
大変だから商業アプリになっているんじゃないですか。


追記:単語データの作成方法についてですが、
許諾されているAPIと違い、許可なく行うスクレイピングには、
著作権上のリスクがあることに、くれぐれも注意してください。


追記2:

著作物の定義に当てはまらない(著作者の思想、感情に入らない)ので、
コピーしても問題なさそう(コメント欄)

[編集物も著作権が成立する?(編集著作物)](編集物も著作権が成立する?(http://tsumakoi-law.com/keieisenryaku/column/copyright/col-copyright02/)

素材の選択または配列によって創作性を有する編集物も、著作物(編集著作物)として編集著作権が成立します。編集著作物に当たるのは、辞典、問題集、資料集、カタログ、電話帳が典型的です。(上記記事より引用)

単語だから著作権が発生しないというのではなく、
単語の集合は配列に(編集)著作権が発生します。

まあ、ネットの一般人の平均的感覚にくらべて、厳しい認識に思えるかもしれませんし、
著作権的にグレーゾーンのWebサービスは現にあるじゃん、と思うかもしれませんが、
法人レベルのサービスでは、とうぜん最初に検討されている課題です。

投稿2016/10/01 09:25

編集2016/10/01 18:19
LLman

総合スコア5592

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

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

oka

2016/10/01 13:58

今ちょっと検索しながら見てるのですが、過去分詞は2通り表現があるものもあるので、カラムがもう一つ増える可能性もありそうです。 頂いたコメントからアルゴリズムを考えてみました。
oka

2016/10/01 17:52

スクレイピングに関しては注意する予定です。 単語に関しては著作物の定義に当てはまらない(著作者の思想、感情に入らない)ので、 コピーしても問題なさそうです。 ただ、語呂で覚えるなどの覚え方があったとするならば、それは著作物になりそうですね。あとは集合物も著作物になりえますが、活用表は事実系ですね。コピーしても問題はなさそうです。
oka

2016/10/01 19:00 編集

もちろん単語帳は編集著作物ということは理解してますし、コピーしてはいけないことはわかっています。 ただ活用表は創作性を有するのかは疑問に残ります。 来週、ちょっと著作権センターに聞いてみます。
oka

2016/10/03 12:35 編集

聞いてみたところ、不規則動詞の活用表は創作性を有しないので著作物と言えないそうです。 お手数をおかけして申し訳ございませんでした。
guest

0

規則活用動詞規則活用動詞単数複数 を持つテーブルを用意して、一致するか? ってチェックするする言語への深い知識が必要でプログラムもかなり複雑になりそうです。中間言語に変換して....翻訳ソフトのノウハウが必要かもしれません。
人工知能まで使えばもっとスマートにできるかもしれませんが、わたしにはそのノウハウはありません。

投稿2016/10/01 08:53

Orlofsky

総合スコア16415

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

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

oka

2016/10/01 08:56

ありがとうございます! 外国人たちはどうやってるんでしょうかね・・・。
Orlofsky

2016/10/01 10:43

文法として覚えるんです。覚え方が雑な人も多いですが。笑い 翻訳ソフトは性能が向上しつつありますが、人名。書籍名などなどの固有名詞は何語であろうと翻訳して欲しいし、英語にフランス語・ドイツ語・イタリア語が混ざっていたり、いきなりラテン語が入ってきたり、古語が混ざっていたりするので、わたしとしてはイチ利用者で良いです。 https://translate.google.com/?hl=ja&tab=TT#it/ja/In%20bocca%20al%20lupo! In bocca al lupo! 頑張って! なぜ、[狼の口]が[頑張って]になるのか、まだわかりません。(_ _;)
matsu

2016/10/01 14:02 編集

横から失礼します。 文法として覚えるというよりはフィーリングですね。 多くの外国人に聞いても何故か聞いてもそういうもんさという答えが返ってくる方が多いです。 狼の口に関しては慣用句なので気にしちゃ負けです。 外国人に何故、天狗が調子にのっている人になるのかと聞かれるようなものです。
oka

2016/10/01 14:53

>Orlofskyさん 確かに、検索時に、活用や複数形を入力させることも一応勉強にはなりますよね(笑)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問