基本的に、文章のブロックを文章に分割する必要があります。それは、あなたがピリオド、疑問符、感嘆符、および他の文章の終端記号を調べる必要があるので、英語でさえ十分に扱いにくいです。
次に、すべての句読点(カンマ、セミコロン、コロンなど)を削除した後、一度に1つの文を処理します。
あなたは、単語の配列が残っているときに、それが簡単になる:
for i = 1 to num_words-1:
for j = i+1 to num_words:
phrase = words[i through j inclusive]
store phrase
それだ、非常にシンプル(は同じくらい簡単ではないかもしれないテキストブロックの最初のマッサージの後あなたが考えるように)。
これは、すべての文章で2つ以上の単語のすべてのフレーズを提供します。
文章の分離、単語の分離、句読点の削除などは最も難しいでしょうが、私はあなたにいくつかの簡単な初期規則を示しました。残りの部分は、テキストのブロックがアルゴリズムを壊すたびに追加する必要があります。
更新:
public class testme {
public final static String text =
"My username is click upvote." +
" I have 4k rep on stackoverflow.";
public static void procSentence (String sent) {
System.out.println ("==========");
System.out.println ("sentence [" + sent + "]");
// Split sentence at whitspace into array.
String [] sa = sent.split("\\s+");
// Process each starting word.
for (int i = 0; i < sa.length - 1; i++) {
// Process each phrase.
for (int j = i+1; j < sa.length; j++) {
// Build the phrase.
String phrase = sa[i];
for (int k = i+1; k <= j; k++) {
phrase = phrase + " " + sa[k];
}
// This is where you have your phrase. I just
// print it out but you can do whatever you
// wish with it.
System.out.println (" " + phrase);
}
}
}
public static void main(String[] args) {
// This is the block of text to process.
String block = text;
System.out.println ("block [" + block + "]");
// Keep going until no more sentences.
while (!block.equals("")) {
// Remove leading spaces.
if (block.startsWith(" ")) {
block = block.substring(1);
continue;
}
// Find end of sentence.
int pos = block.indexOf('.');
// Extract sentence and remove it from text block.
String sentence = block.substring(0,pos);
block = block.substring(pos+1);
// Process the sentence (this is the "meat").
procSentence (sentence);
System.out.println ("block [" + block + "]");
}
System.out.println ("==========");
}
}
:要求され、ここでフレーズを与えるいくつかのJavaコードだとして
出力
:
今
block [My username is click upvote. I have 4k rep on stackoverflow.]
==========
sentence [My username is click upvote]
My username
My username is
My username is click
My username is click upvote
username is
username is click
username is click upvote
is click
is click upvote
click upvote
block [ I have 4k rep on stackoverflow.]
==========
sentence [I have 4k rep on stackoverflow]
I have
I have 4k
I have 4k rep
I have 4k rep on
I have 4k rep on stackoverflow
have 4k
have 4k rep
have 4k rep on
have 4k rep on stackoverflow
4k rep
4k rep on
4k rep on stackoverflow
rep on
rep on stackoverflow
on stackoverflow
block []
==========
、これはJavaのかなり基本的で心に留めておくには、(いくつかは、それがC :-)のJava方言で書かれていると言うかもしれません。あなたが尋ねたように文から単語群を出力する方法を説明することを意味しています。
ありますではありません私は元の答えで言及したすべての上質な文章の検出と句読点除去を行います。
しかし、これらのフレーズはどのようなルールで作成されていますか? – Gumbo
それを見て、それは2〜3の連続した言葉です... – Tomalak
自然言語処理==痛みの世界 – Greg