S G*_*ber 17 java nlp stanford-nlp gate
使用Java进行文本简化的最佳工具是什么?
以下是文本简化的示例:
John, who was the CEO of a company, played golf.
?
John played golf. John was the CEO of a company.
Run Code Online (Sandbox Code Playgroud)
Kha*_*rul 32
我认为你的问题是将复杂或复合句子转换成简单句子的任务.根据文献句子类型,一个简单的句子是从一个独立的条款建立的.复合词和复句是由至少两个子句构成的.此外,条款必须有主语和动词.
所以你的任务是将句子分成构成你句子的条款.
从斯坦福CoreNLP解析依赖性是将复合句和复句分成简单句子的完美工具.您可以在线试用该演示.
从您的样本句子中,我们将得到斯坦福类型依赖(SD)表示法的解析结果,如下所示:
nsubj(CEO-6, John-1)
nsubj(played-11, John-1)
cop(CEO-6, was-4)
det(CEO-6, the-5)
rcmod(John-1, CEO-6)
det(company-9, a-8)
prep_of(CEO-6, company-9)
root(ROOT-0, played-11)
dobj(played-11, golf-12)
有一条可从关系式(在SD),该类别是受试者,例如来鉴定nsubj,nsubjpass.参见斯坦福依赖手册
基本条款可以从头部作为动词部分提取,并作为主体部分依赖.从上面的SD,有两个基本条款即
获得基本条款后,您可以添加另一部分,使您的子句成为完整而有意义的句子.为此,请参阅斯坦福依赖手册.
顺便说一句,你的问题可能与从一个句子中找出有意义的子句有关
一旦你得到一对主语一个动词,即nsubj(CEO-6, John-1)获得所有依赖链接到该依赖关系,除了任何依赖类别的主题,然后从这些依赖关系中提取唯一的单词.
根据例子,nsubj(CEO-6, John-1)如果你开始遍历John-1,你会得到nsubj(played-11, John-1)但你应该忽略它,因为它的类别是主题.
下一步是从CEO-6部分遍历.你会得到
cop(CEO-6, was-4)
det(CEO-6, the-5)
rcmod(John-1, CEO-6)
prep_of(CEO-6, company-9)
从上面的结果中,您获得了遍历的新依赖项(即查找具有was-4, the-5, company-9head或dependent的其他依赖项).
现在你的依赖是
cop(CEO-6, was-4)
det(CEO-6, the-5)
rcmod(John-1, CEO-6)
prep_of(CEO-6, company-9)
det(company-9, a-8)
在此步骤中,您已完成遍历链接到的所有依赖项nsubj(CEO-6, John-1).接下来,从所有头部和从属文件中提取单词,然后根据附加到这些单词的数字按升序排列单词.这个数字表示原始句子中的单词顺序.
John was the CEO a company
我们的新句子缺少一部分,即of.这部分隐藏在prep_of(CEO-6, company-9).如果您阅读斯坦福依赖手册,有两种SD,折叠和非折叠.请阅读它们以了解of隐藏的原因以及如何获取此隐藏部分的单词顺序.
用同样的方法,你会得到第二句话
John played golf
我认为可以为这种情况的基本情况设计一个非常简单的算法,而现实世界的情况可能太多,这样的方法将变得难以驾驭:)
我仍然认为我应该大声思考并编写我的方法,并可能添加一些python代码.我的基本想法是从第一原则中获得解决方案,主要是通过明确地揭示我们的实际模型.在我们用HAND和SCRATCH做之前,不要依赖其他理论,模型和库.
目标:给出一个句子,从中提取子句.
例如:约翰,他是公司的首席执行官,打高尔夫球.
预期产出:约翰是该公司的首席执行官.约翰打高尔夫球.
以下是我以模型假设的形式写出的模型:(公理?)
MA1.通过插入子句可以扩展简单的句子.MA2.子权利是对一个或多个实体的资格/修改(附加信息).MA3.要插入子句,我们在我们想要扩展的实体旁边放一个逗号(提供更多信息)并附加子句,我将其称为扩展名 - 并在扩展名结束时放置另一个逗号.
给定此模型,该算法可以直接至少首先解决简单情况.
嗯,这是我们的算法.是的,这听起来像一个黑客.它是.但是我现在正在学习的是,如果你在一个程序中使用技巧它是一个黑客,如果它可以处理更多的东西,这是一种技术.
因此,让我们稍微扩展并使情况复杂化.
复合案例:例2. John是公司的首席执行官,与首席财务官Ram一起打高尔夫球.
在我写作的时候,我注意到我已经省略了首席财务官的"谁是"这句话!这让我们看到了我们的算法失败的复杂情况.在去那里之前,让我创建一个更简单的2版本.
示例3. John是公司的首席执行官,与担任首席财务官的Ram一起打高尔夫球.
示例4.公司首席执行官约翰与首席财务官Ram一起打高尔夫球.
等等我们还没完成!
示例5.当时担任首席财务官的首席执行官约翰和拉姆扮演高尔夫,这是一款引人入胜的游戏.
为了实现这一点,我需要扩展我的模型假设:
MA4.同样可以扩展多个实体,但不应引起混淆,因为扩展条款紧挨着被通知的实体发生.(例如3)
MA5.可以省略'who was'短语,因为它可以由听众推断.(例如4)
MA6.一些实体是人,他们将使用"谁"扩展,而某些实体是事物,使用"哪个"扩展.可以省略这些延伸头中的任何一个.
现在我们如何在算法中处理这些复杂情况?
试试这个:
SPLIT-SENTENCE-INTO-BASE-ANDTENSIONS:如果句子包含逗号,请查找以下逗号,并将其中的任何内容提取到扩展句中.继续,直到找不到结束逗号或打开逗号.此时,您应该有基本句子和一个或多个扩展句子的列表.
PROCESS_EXTENSIONS:对于每个扩展名,如果它具有"who is"或"which is",则在扩展词条之前按名称替换它.如果扩展名没有'who is'或'which is',则放置前导词和a.
打印:首先是所有扩展句子,然后是基本句子.
不可怕.
当我在接下来的几天里得到一些时间时,我将添加一个python实现.
谢谢
Ravi Annaswamy