正規表現は、私が長い間使用していた良いオプションです。
私にとってうまくいった非常に良い正規表現は
string[] sentences = Regex.Split(sentence, @"(?<=['""A-Za-z0-9][\.\!\?])\s+(?=[A-Z])");
ただし、正規表現は効率的ではありません。また、ロジックは理想的なケースでは機能しますが、本番環境ではうまく機能しません。
たとえば、私のテキストが
アメリカは素晴らしい国です。ほとんどの人は、そこに住むことに幸せを感じています。
正規表現メソッドは、各期間で分割することにより、5 つの文として分類します。しかし、論理的には、2 つの文に分割する必要があることはわかっています。
これが私が機械学習技術を探すようになった理由であり、ついに SharpNLP は私にとってかなりうまく機能しました.
private string mModelPath = @"C:\Users\ATS\Documents\Visual Studio 2012\Projects\Google_page_speed_json\Google_page_speed_json\bin\Release\";
private OpenNLP.Tools.SentenceDetect.MaximumEntropySentenceDetector mSentenceDetector;
private string[] SplitSentences(string paragraph)
{
if (mSentenceDetector == null)
{
mSentenceDetector = new OpenNLP.Tools.SentenceDetect.EnglishMaximumEntropySentenceDetector(mModelPath + "EnglishSD.nbin");
}
return mSentenceDetector.SentenceDetect(paragraph);
}
この例では、EnglishSD.nbin を使用した SharpNLP を使用しました。これは、文検出用の事前トレーニング済みモデルです。
このメソッドに同じ入力を適用すると、テキストは 2 つの論理文に完全に分割されます。
SharpNLP プロジェクトを使用して、POSTag、Chuck などをトークン化することもできます。
SharpNLP を C# アプリケーションに段階的に統合するには、私が書いた詳細な記事を読んでください。コード スニペットとの統合について説明します。
ありがとう