【问题标题】:Determine POS tagging in English based on database files根据数据库文件确定英文词性标注
【发布时间】:2013-03-24 02:49:35
【问题描述】:

我有点困惑如何确定英语中的词性标记。在这种情况下,我假设英语中的一个单词有一种类型,例如单词“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 标记,请告诉我。

【问题讨论】:

  • 我不明白这个问题。很明显,许多词可以有更多的词性(例如,“book”可以是动词,如 I'd like to book a hotel room)。问题是如何处理?时态与这一切有什么关系? “根据时态识别句子”是什么意思?或者您只是在寻找关于 POS 标记的介绍(在这种情况下 Stackoverflow 将不是去的地方)?

标签: c# nlp part-of-speech


【解决方案1】:

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

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

  1. 创建一个包含所有英语常用句型的词典。例如,主语+动词是英语模式,所有像I sleepDog barkedShip will arrive这样的句子都匹配S-V模式。您可以找到最常见的英语模式列表here。请注意,您可能需要在一段时间内不断修改此词典以提高程序的准确性。

  2. 尝试将输入句子与您在上面创建的字典中的模式之一匹配,例如,如果输入句子是Snakes, unlike elephants, are venomous.,那么您的代码必须能够找到与该模式匹配的内容: Subject,不像 AnotherSubject, Verb ObjectS-,unlike-S`-, -V-O。要成功执行此步骤,您可能需要编写能够很好地识别 Structure Markers 的代码,例如此例句中的单词 unlike

  3. 当您在模式词典中找到与输入句子匹配的内容后,您可以轻松地为句子中的每个单词分配一个标签。例如,在我们的句子中,单词Snakes 将被标记为主语,就像单词elephants 一样,单词are 将被标记为动词,最后venomous这个词将被标记为一个对象

  4. 为句子中的每个单词分配一个唯一标签后,您可以在已有的相应文本文件中查找该单词并确定您的句子是否有效。

  5. 如果你的句子不匹配任何句型,那么你有两种选择:

    a) 如果这个无法识别的句子是有效的英文句子,则将其添加到您的模式词典中。

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

您想要达到的目标最好使用机器学习技术来解决,这样系统就可以学习任何新模式。因此,您可能希望包含一个培训系统,该系统将在找到与任何现有模式都不匹配的有效英语句子时将新模式添加到您的模式字典中。我没有过多考虑如何做到这一点,但现在,您可以手动修改您的句型字典。

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

【讨论】:

  • 太棒了@Pankaj Sharma 先生。几天前,我决定使用 OpenNLP 来解决这个问题。因为使用蛮力(手动)解决问题看起来像业余学生。我不知道讲座是否让我使用 OpenNLP,但我想尝试.. 到目前为止,OpenNLP 运行良好,但我在作业中遇到了新问题,它是句型。在定义了词性标注之后,我想尝试分析句型,比如最常见的时态、现在时、过去时等......
  • 现在,为了检查句型,我使用了 CKY 算法(Cocke-Younger-Kasami)对其进行了分析。我必须以乔姆斯基范式(CNF)设计句型。到目前为止,我觉得在 CNF 中设计它很困难。以下是英语中最常见的句型,例如:S -> NP VP, NP -> Det N |姓名,PP -> PREP NP,VP -> V | V NP | V NP PP | V PP
  • 很高兴听到您的意见,并与您讨论。因为我是学生。 @Pankaj Sharma 先生有什么建议吗?
猜你喜欢
  • 2011-04-27
  • 2018-01-20
  • 2015-08-05
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-21
相关资源
最近更新 更多