Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于数据库文件确定英语词性标注_C#_Nlp_Part Of Speech - Fatal编程技术网

C# 基于数据库文件确定英语词性标注

C# 基于数据库文件确定英语词性标注,c#,nlp,part-of-speech,C#,Nlp,Part Of Speech,我有点困惑如何确定英语中的词性标记。在本例中,我假设英语中的一个单词有一种类型,例如单词“book”被识别为名词,而不是动词。我想根据时态识别英语句子。例如,“我寄了这本书”被认为是过去时 说明: 我有许多数据库(*.txt)文件:NounList.txt、verbList.txt、形容词list.txt、副词list.txt、connectionlist.txt、prepositionList.txt、articleList.txt。如果数据库中有输入词,我假设可以推断出这些词的类型。但是,如

我有点困惑如何确定英语中的词性标记。在本例中,我假设英语中的一个单词有一种类型,例如单词“book”被识别为名词,而不是动词。我想根据时态识别英语句子。例如,“我寄了这本书”被认为是过去时

说明:

我有许多数据库(*.txt)文件:NounList.txt、verbList.txt、形容词list.txt、副词list.txt、connectionlist.txt、prepositionList.txt、articleList.txt。如果数据库中有输入词,我假设可以推断出这些词的类型。但是,如何开始在数据库中查找?例如,“我发送了这本书”:如何开始在数据库中搜索每个单词,“我”作为名词,“发送”作为动词,“作为文章”,“书”作为名词?还有比搜索每个数据库中的每个单词更好的方法吗?我怀疑每个数据库都有独特的元素

我在此附上我的观点

private List<string> ParseInput(String allInput)
{
    List<string> listSentence = new List<string>();

    char[] delimiter = ".?!;".ToCharArray();
    var sentences = allInput.Split(delimiter, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim());

    foreach (var s in sentences)
        listSentence.Add(s);

        return listSentence;
}

private void tenseReviewMenu_Click(object sender, EventArgs e)
    {
        string allInput = rtbInput.Text;

        List<string> listWord = new List<string>();
        List<string> listSentence = new List<string>();

        HashSet<string> nounList = new HashSet<string>(getDBList("nounList.txt"));
        HashSet<string> verbList = new HashSet<string>(getDBList("verbList.txt"));
        HashSet<string> adjectiveList = new HashSet<string>(getDBList("adjectiveList.txt"));
        HashSet<string> adverbList = new HashSet<string>(getDBList("adverbList.txt"));

        char[] separator = new char[] { ' ', '\t', '\n', ',' etc... };         

        listSentence = ParseInput(allInput);

        foreach (string sentence in listSentence)
        {
            foreach (string word in sentence.Split(separator))
                if (word.Trim() != "")
                    listWord.Add(word);               
        }

        string testPOS = "";

        foreach (string word in listWord)
        {
            if (nounList.Contains(word.ToLowerInvariant()))
                testPOS += "noun ";
            else if (verbList.Contains(word.ToLowerInvariant()))
                testPOS += "verb ";
            else if (adjectiveList.Contains(word.ToLowerInvariant()))
                testPOS += "adj ";
            else if (adverbList.Contains(word.ToLowerInvariant()))
                testPOS += "adv ";

        }
        tbTest.Text = testPOS;
    }
private List ParseInput(字符串allInput)
{
List LISTSTANCE=新列表();
字符[]分隔符=“.?!;”.ToCharArray();
var statemens=allInput.Split(分隔符,StringSplitOptions.RemoveEmptyEntries);
foreach(句子中的var s)
列表句子。添加(s);
返回列表语句;
}
私有void tensereview菜单\单击(对象发送者,事件参数e)
{
字符串allInput=rtbInput.Text;
List listWord=新列表();
List LISTSTANCE=新列表();
HashSet nounList=新的HashSet(getDBList(“nounList.txt”);
HashSet verbList=新的HashSet(getDBList(“verbList.txt”);
HashSet形容词列表=新的HashSet(getDBList(“形容词列表.txt”);
HashSet-副词列表=新的HashSet(getDBList(“副词列表.txt”);
char[]separator=new char[]{'、'\t'、'\n'、'、'等..};
ListSession=ParseInput(allInput);
foreach(列表句子中的字符串句子)
{
foreach(句子中的字符串。拆分(分隔符))
if(word.Trim()!=“”)
添加(word);
}
字符串testPOS=“”;
foreach(listWord中的字符串字)
{
if(nounylist.Contains(word.ToLowerInvariant()))
testPOS+=“名词”;
else if(verbList.Contains(word.ToLowerInvariant()))
testPOS+=“动词”;
else if(形容词列表.Contains(word.ToLowerInvariant()))
testPOS+=“调整”;
else if(副词列表.Contains(word.ToLowerInvariant()))
testPOS+=“adv”;
}
tbTest.Text=testPOS;
}

词性标注是我作业中的第二个解释。所以我使用一种简单的方法来确定基于数据库的词性标记。但是,如果有更简单的方法:易于使用、易于理解、易于获得伪代码、易于设计。。。要确定词性标注,请让我知道。

我希望下面提供的伪代码对您有所帮助。如果我有时间,我也会为你写一些代码

可通过以下步骤解决此问题:

  • 创建一本包含所有英语常用句型的词典。例如,主语+动词是一种英语模式,所有像
    I sleep
    Dog barked
    Ship这样的句子都将到达
    S-V模式相匹配。你可以找到最常见的英语模式列表。请注意,在一段时间内,您可能需要不断修订本词典,以提高程序的准确性

  • 请尝试将输入句子与您在上面创建的词典中的一种模式匹配,例如,如果输入句子是蛇,不像大象,是有毒的。,那么您的代码必须能够找到与该模式匹配的:
    主题
    ,不像另一主题,
    动词
    宾语
    S-,不象-S`-,-V-O。要成功执行此步骤,您可能需要编写能够很好地识别结构标记的代码,如本示例中的单词不像

  • 当您在模式词典中找到与输入句子匹配的内容时,您可以轻松地为句子中的每个单词指定一个标记。例如,在我们的句子中,
    这个词会被标记为主语,就像
    大象
    这个词一样,
    这个词会被标记为动词,最后,
    有毒的
    这个词会被标记为对象

  • 为句子中的每个单词指定了唯一标记后,可以在已有的相应文本文件中查找该单词,并确定句子是否有效

  • 如果你的句子与任何句型都不匹配,那么你有两个选择:

    a) 如果这是一个有效的英语句子,请在模式词典中添加此未识别句子的模式

    b) 或者,将输入的句子作为无效英语句子丢弃

  • 像您试图实现的目标这样的问题最好使用机器学习技术来解决,这样系统就可以学习任何新模式。因此,您可能希望包括一个培训师系统,该系统将在发现与任何现有模式不匹配的有效英语句子时向模式词典添加新模式。我还没有想过如何做到这一点,但现在,你可以手动修改你的句型词典


    我很高兴听到您对这个伪代码的意见,并可以进一步集思广益。

    我希望下面介绍的伪代码对您有所帮助。如果我有时间,我也会为你写一些代码

    这个问题可以通过以下方法解决: