C# C中带有词性标记Stanford NPL的每个句子的词性标记列表#

C# C中带有词性标记Stanford NPL的每个句子的词性标记列表#,c#,stanford-nlp,pos-tagger,C#,Stanford Nlp,Pos Tagger,使用Stanford NPL.NET的词性标记器,我试图提取每个句子的词性标记的详细列表 e、 g:“看那边,看那辆车!” 让/VB a/DT查看/NN在那里/在那里/RB./。看/VB在/DT车内/NN !/. 我需要: POS文本:“Have” POS标签:“VB” 原文中的位置 我通过反射访问结果的私有字段来实现这一点 我知道这很难看,效率不高,而且很糟糕,但在我知道之前,这是我唯一发现的。因此,我的问题是;是否有任何内置方式访问此类信息 using (var streamReader

使用Stanford NPL.NET的词性标记器,我试图提取每个句子的词性标记的详细列表

e、 g:“看那边,看那辆车!”

让/VB a/DT查看/NN在那里/在那里/RB./。看/VB在/DT车内/NN !/.

我需要:

  • POS文本:“Have”
  • POS标签:“VB”
  • 原文中的位置
我通过反射访问结果的私有字段来实现这一点

我知道这很难看,效率不高,而且很糟糕,但在我知道之前,这是我唯一发现的。因此,我的问题是;是否有任何内置方式访问此类信息

using (var streamReader = new StringReader(rawText))
{
    var tokenizedSentences = MaxentTagger.tokenizeText(streamReader).toArray();

    foreach (ArrayList tokenizedSentence in tokenizedSentences)
    {
        var taggedSentence = _posTagger.tagSentence(tokenizedSentence).toArray();

        for (int index = 0; index < taggedSentence.Length; index++)
        {
            var partOfSpeech = ((StringLabel) (taggedSentence[index]));
            var posText = partOfSpeech.value();

            var posTag = ReflectionHelper.GetInstanceField(typeof (TaggedWord), partOfSpeech, "tag") as string;
            var posBeginPosition = (int)ReflectionHelper.GetInstanceField(typeof (StringLabel), partOfSpeech, "beginPosition");
            var posEndPosition = (int)ReflectionHelper.GetInstanceField(typeof (StringLabel), partOfSpeech, "endPosition");

            // process the pos
        }
    } 
使用(var streamReader=newstringreader(rawText))
{
var tokenizedstations=MaxentTagger.tokenizeText(streamReader.toArray();
foreach(标记化句子中的ArrayList标记化句子)
{
var taggedSentence=_posTagger.tagSession(tokenizedSession).toArray();
对于(int index=0;index
ReflectionHelper:

public static object GetInstanceField<T>(T instance, string fieldName)
{
    const BindingFlags bindFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static;

    object result = null;
    var field = typeof(T).GetField(fieldName, bindFlags);
    if (field != null)
    {
        result = field.GetValue(instance);
    }
    return result;
}
公共静态对象GetInstanceField(T实例,字符串字段名)
{
const BindingFlags bindFlags=BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static;
对象结果=空;
var field=typeof(T).GetField(fieldName,bindFlags);
如果(字段!=null)
{
结果=field.GetValue(实例);
}
返回结果;
}

解决方案非常简单。 只需将词性(taggedSentence[index])转换为一个TaggedWord。 然后可以从getter beginPosition()、endPosition()、tag()和value()轻松访问这些属性