c# - sharpNLP 作为 .nbin 文件扩展名

标签 c# nlp

<分区>

我从这个网站下载了 SharpNLP http://sharpnlp.codeplex.com/ 但它下载了 .nbin 文件,我不知道如何处理。 有什么帮助吗?

最佳答案

我也是和你一样的用户。但经过一番努力,我找到了几种使用 Nbin 文件的方法。如前所述,Nbin 文件是经过训练的模型。我们可以使用 BinaryGisModelWriter 创建 Nbin 文件。然而,就像我一样,我相信您也没有兴趣创建自己的模型,而是想在您的项目中有效地使用 nbin 文件。

为此你需要两个 dll。

SharpEntropy.dll OpenNLP.dll

除此之外,为了快速入门,您还可以下载 Sample Project from Code Project for SharpNLP

最好下载.NET 2.0 version of the sample

在其中,您将拥有一个名为 OpenNLP 的项目。将该项目添加到您希望使用 NLP 或 nbin 文件的任何项目,并将您的解决方案的引用添加到“OpenNLP”项目。

现在从您的主要解决方案中,您可以初始化不同的工具,例如,我将向您展示句子检测器、分词器和 PosTagger 的初始化

 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 OpenNLP.Tools.Tokenize.EnglishMaximumEntropyTokenizer mTokenizer;
 private OpenNLP.Tools.PosTagger.EnglishMaximumEntropyPosTagger mPosTagger;

mModelPath 是保存您希望使用的 nbin 文件路径的变量。

现在我将向您展示如何使用上面定义的类的构造函数来使用 nbin 文件。

对于句子检测器

private string[] SplitSentences(string paragraph)
    {
        if (mSentenceDetector == null)
        {
            mSentenceDetector = new OpenNLP.Tools.SentenceDetect.EnglishMaximumEntropySentenceDetector(mModelPath + "EnglishSD.nbin");
        }

        return mSentenceDetector.SentenceDetect(paragraph);
    }

分词器

private string[] TokenizeSentence(string sentence)
    {
        if (mTokenizer == null)
        {
            mTokenizer = new OpenNLP.Tools.Tokenize.EnglishMaximumEntropyTokenizer(mModelPath + "EnglishTok.nbin");
        }

        return mTokenizer.Tokenize(sentence);
    }

对于 POSTagger

private string[] PosTagTokens(string[] tokens)
    {
        if (mPosTagger == null)
        {
            mPosTagger = new OpenNLP.Tools.PosTagger.EnglishMaximumEntropyPosTagger(mModelPath + "EnglishPOS.nbin", mModelPath + @"\Parser\tagdict");
        }

        return mPosTagger.Tag(tokens);
    }

你可以看到我分别使用了 EnglishSD.nbin、EnglishTok.nbin 和 EnglishPOS.nbin 进行句子检测、分词和词性标注。 nbin 文件只是预训练模型,通常可以使用 SharpNLP 或 OpenNLP 使用。

您可以从中找到最新的训练模型集 官方 OpenNLP 工具模型或 来自用于 SharpNLP 的 Nbin 文件的 Codeplex 存储库

使用上述方法和 Nbin 文件的示例词性标注器如下所示,

public void POSTagger_Method(string sent)
    {
        File.WriteAllText("POSTagged.txt", sent+"\n\n");
        string[] split_sentences = SplitSentences(sent);
        foreach (string sentence in split_sentences)
        {
            File.AppendAllText("POSTagged.txt", sentence+"\n");
            string[] tokens = TokenizeSentence(sentence);
            string[] tags = PosTagTokens(tokens);

            for (int currentTag = 0; currentTag < tags.Length; currentTag++)
            {
                File.AppendAllText("POSTagged.txt", tokens[currentTag] + " - " + tags[currentTag]+"\n");
            }
            File.AppendAllText("POSTagged.txt", "\n\n");
        }
    }

您可以使用可用的 Nbin 文件为分块、解析等编写类似的方法,或者您可以训练自己的方法之一。

虽然我没有自己训练过模型,但是从一个整齐的训练文本文件训练模型的语法是

System.IO.StreamReader trainingStreamReader = new System.IO.StreamReader(trainingDataFile);
SharpEntropy.ITrainingEventReader eventReader = new SharpEntropy.BasicEventReader(new SharpEntropy.PlainTextByLineDataReader(trainingStreamReader));
SharpEntropy.GisTrainer trainer = new SharpEntropy.GisTrainer();
trainer.TrainModel(eventReader);
mModel = new SharpEntropy.GisModel(trainer);

我相信这篇文章将帮助您开始使用 SharpNLP。请随时讨论您面临的任何问题。我很乐意回复。

关于c# - sharpNLP 作为 .nbin 文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11279054/

相关文章:

c# - HealthChecks.UI.SqlServer.Storage 迁移问题

c# - 以编程方式将现有项目添加到新的 VS2012 解决方案失败

c# - 在 .NET Speech 中添加另一个声音

java - 语言查询和字数统计开源库 (LIWC)

java - 使用 LanguageTool 检测无意义和/或语法错误的句子

machine-learning - 如何从上次保存的状态开始重新训练 Tensorflow seq2seq 模型?

c# - 如何使用 SetWindowHookEx 从 C# 应用程序注入(inject) native dll(比使用 CreateRemoteThread 注入(inject)更安全)

c# - Resharper 一直提示命名空间与文件位置不对应,即使它确实如此

python - 如何通过pandas过滤满足正则表达式的行

Python:如何将字符串 'ub' 添加到字符串中每个发音的元音前?