我有点困惑如何确定英语的词性标记。在这种情况下,我假设英语中的一个单词有一种类型,例如单词“book”被识别为 NOUN,而不是 VERB。我想根据时态识别英语句子。例如,“I sent the book”被识别为过去时。
描述:
我有许多数据库 (*.txt) 文件:NounList.txt、verbList.txt、adjectiveList.txt、adverbList.txt、connectionList.txt、prepositionList.txt、articleList.txt。如果数据库中有输入词,我假设可以推断出这些词的类型。但是,如何开始在数据库中查找呢?例如,“I sent the book”:如何开始在数据库中搜索每个单词,“I”作为名词,“sent”作为动词,“the”作为文章,“book”作为名词?有比在每个数据库中搜索每个单词更好的方法吗?我怀疑每个数据库都有独特的元素。
我在这里附上我的观点。
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;
}
POS 标记是我在作业中的次要解释。所以我使用一种简单的方法来确定基于数据库的 POS 标记。但是,如果有更简单的方法:易于使用、易于理解、易于获取伪代码、易于设计……确定 POS 标记,请告诉我。