我需要解析Python中段落的句子.是否有现成的包,或者我应该尝试在这里使用正则表达式?
NLP 中的标记化和分段有什么区别?我搜索了它们,但没有真正发现任何差异。
nlp artificial-intelligence terminology machine-learning text-segmentation
如果a有一个包含单词且没有空格的字符串,那么鉴于我有一个包含这些单词的词典/列表,我应该如何解析这些单词呢?
例如,如果我的字符串是"thisisastringwithwords",我怎么能用字典创建输出"这是一个带字的字符串"?
我听说使用数据结构Tries可能有所帮助,但也许有人可以帮助使用伪代码?例如,我想也许你可以将字典索引到一个trie结构中,然后沿着trie跟随每个char; 问题是,我不熟悉如何在(伪)代码中执行此操作.
我试图解析大量文本中的句子.使用java我开始使用OpenPLP和Stanford的Parser等NLP工具.
但这里是我被卡住的地方.虽然这两种解析器都非常棒,但它们在非统一文本方面却失败了.
例如,在我的文本中,大多数句子都是以句点分隔的,但在某些情况下,例如子弹点则不是.这两个解析都失败了.
我甚至尝试在stanford解析中为多个句子终结符设置选项,但输出并没有好多少!
有任何想法吗??
编辑:为了使它更简单,我希望解析文本,其中分隔符是新行("\n")或句点(".")...
有没有人知道处理查找句子边界的Java库?我认为这将是一个智能的StringTokenizer实现,它知道语言可以使用的所有句子终止符.
这是我对BreakIterator的体验:
在这里使用示例:我有以下日语:
???????????????????????????????
Run Code Online (Sandbox Code Playgroud)
在ascii中,它看起来像这样:
\ufeff\u4eca\u65e5\u306f\u30d1\u30bd\u30b3\u30f3\u3092\u8cb7\u3063\u305f\u3002\u9ad8\u6027\u80fd\u306e\u30de\u30c3\u30af\u306f\u65e9\u3044\uff01\u3068\u3066\u3082\u5feb\u9069\u3067\u3059\u3002
Run Code Online (Sandbox Code Playgroud)
这是我更改的示例的一部分:static void sentenceExamples(){
Locale currentLocale = new Locale ("ja","JP");
BreakIterator sentenceIterator =
BreakIterator.getSentenceInstance(currentLocale);
String someText = "???????????????????????????????";
Run Code Online (Sandbox Code Playgroud)
当我看到边界指数时,我看到了这个:
0|13|24|32
Run Code Online (Sandbox Code Playgroud)
但这些指数与任何句子终结者都不对应.
在文本中检测句子边界似乎很难.引号如.!?可能会被用来分隔句子,但不是那么准确,因为可能有歧义的词语和引用,如美国或教授或博士我正在研究Tperlregex图书馆和Jan Goyvaerts的正则表达手册,但我不知道如何写出那个表达式检测句子?
在delphi中使用Tperlregex可能是比较准确的表达式?
谢谢
我想解决单词分裂问题(从没有空格的长字符串解析单词).对于examle我们要从中提取的话somelongword来[some, long, word].
我们可以通过使用字典的一些动态方法来实现这一点,但我们遇到的另一个问题是解析模糊性.即orcore=> or core或orc ore(我们不考虑短语含义或词性).所以我考虑使用一些统计或ML方法.
我发现Naive Bayes和带有火车组的Viterbi算法可以用来解决这个问题.你能指点一些关于这些算法应用于分词问题的信息吗?
UPD:我使用Peter Norvig的代码中的一些建议在Clojure上实现了这个方法
你如何将带有自由文本,列表,表格,标题等的HTML页面解析成句子?
以这个维基百科页面为例.有/是:
在搞乱了python NLTK之后,我想测试所有这些不同的语料库注释方法(来自http://nltk.googlecode.com/svn/trunk/doc/book/ch11.html#deciding-which-layers-注释 - 包括):
一旦你将文档分成句子,它似乎非常简单.但是,如何从维基百科页面中删除类似HTML的内容呢?我非常熟悉使用HTML/XML解析器和遍历树,我尝试剥离HTML标记以获取纯文本,但由于删除HTML后缺少标点符号,NLTK不会解析表格单元格之类的内容,甚至列表,正确.
是否有一些最佳实践或策略来解析NLP的东西?或者您只需手动编写特定于该单个页面的解析器?
只是寻找正确方向的一些指针,真的想尝试这个NLTK!
请看下面的内容.
String[]sentenceHolder = titleAndBodyContainer.split("\n|\\.(?!\\d)|(?<!\\d)\\.");
Run Code Online (Sandbox Code Playgroud)
这就是我试图将一个段落分成句子的方式.但有个问题.我的段落包括日期,如Jan. 13, 2014单词U.S和数字2.2.他们都被上面的代码分开了.所以基本上,这个代码分裂了许多"点",无论它是否完全停止.
我试着String[]sentenceHolder = titleAndBodyContainer.split(".\n");和String[]sentenceHolder = titleAndBodyContainer.split("\\.");为好.都失败了.
如何"恰当地"将一个段落分成句子?
作品:
#!/usr/bin/env python3
from uniseg.graphemecluster import grapheme_clusters
def albanian_digraph_dh(s, breakables):
for i, breakable in enumerate(breakables):
if s.endswith('d', 0, i) and s.startswith('h', i):
yield 0
else:
yield breakable
print(list(grapheme_clusters('dhelpëror', albanian_digraph_dh)))
#['dh', 'e', 'l', 'p', 'ë', 'r', 'o', 'r']
Run Code Online (Sandbox Code Playgroud)
需要改进/定制:
perl -C -Mutf8 -mUnicode::GCString -E'
say join " ", Unicode::GCString
->new("dhelpëror")->as_array
'
#d h e l p ë r o r
perl6 -e'"dhelpëror".comb.say'
#(d h e l p ë r o r)
Run Code Online (Sandbox Code Playgroud)
注意:编写自己的细分(几乎可以保证不会正确实现UAX#29)算是避免问题的方法。