C# 基于数据库文件确定英语词性标注
我有点困惑如何确定英语中的词性标记。在本例中,我假设英语中的一个单词有一种类型,例如单词“book”被识别为名词,而不是动词。我想根据时态识别英语句子。例如,“我寄了这本书”被认为是过去时 说明: 我有许多数据库(*.txt)文件:NounList.txt、verbList.txt、形容词list.txt、副词list.txt、connectionlist.txt、prepositionList.txt、articleList.txt。如果数据库中有输入词,我假设可以推断出这些词的类型。但是,如何开始在数据库中查找?例如,“我发送了这本书”:如何开始在数据库中搜索每个单词,“我”作为名词,“发送”作为动词,“作为文章”,“书”作为名词?还有比搜索每个数据库中的每个单词更好的方法吗?我怀疑每个数据库都有独特的元素 我在此附上我的观点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。如果数据库中有输入词,我假设可以推断出这些词的类型。但是,如
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。要成功执行此步骤,您可能需要编写能够很好地识别结构标记的代码,如本示例中的单词不像蛇
这个词会被标记为主语,就像大象
这个词一样,是
这个词会被标记为动词,最后,有毒的
这个词会被标记为对象我很高兴听到您对这个伪代码的意见,并可以进一步集思广益。我希望下面介绍的伪代码对您有所帮助。如果我有时间,我也会为你写一些代码 这个问题可以通过以下方法解决: