鉴于我们假设的一些(英语)单词是复数,是否可以推导出单数形式?如果可能的话,我想避免查找/字典表.
一些例子:
Examples -> Example a simple 's' suffix Glitch -> Glitches 'es' suffix, as opposed to above Countries -> Country 'ies' suffix. Sheep -> Sheep no change: possible fallback for indeterminate values
对语言库的建议x是好的,只要它们是开源的(即,有人可以检查它们以确定如何用语言进行y)
我在Lucene.NET中使用SnowBallAnalyzer时遇到了问题.它对某些单词很有用,但是其他单词根本没有找到任何结果,我不知道如何进一步深入研究这些内容.我正在测试美国农业部食品描述文件的搜索,该文件可在此处找到(http://www.ars.usda.gov/SP2UserFiles/Place/12354500/Data/SR23/asc/FOOD_DES.txt).我正在使用英语词干算法.搜索"鸡蛋"时,我得到以下结果:
Bagels, egg
Bread, egg
Egg, whole, raw, fresh
Egg, white, raw, fresh
Egg, yolk, raw, fresh
Egg, yolk, raw, frozen
Egg, whole, cooked, fried
...
Run Code Online (Sandbox Code Playgroud)
那些结果很棒.但是在搜索"apple"时我根本没有得到任何结果.当我使用StandardAnalyzer并搜索"apple"时,我得到以下结果.
Croissants, apple
Strudel, apple,
Babyfood, juice, apple
Babyfood, apple-banana juice
...
Run Code Online (Sandbox Code Playgroud)
不是最好的结果,但至少它显示了一些东西.任何人都知道为什么阻塞分析仪会以这样的方式过滤我不会得到任何结果?
编辑:这是我正在使用的原型代码.
static string[] Search(string searchTerm)
{
//Lucene.Net.Analysis.Analyzer analyzer = new Lucene.Net.Analysis.Snowball.SnowballAnalyzer("English");
Lucene.Net.Analysis.Analyzer analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer();
Lucene.Net.QueryParsers.QueryParser parser = new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_29, "text", analyzer);
Lucene.Net.Search.Query query = parser.Parse(searchTerm);
Lucene.Net.Search.Searcher searcher = new Lucene.Net.Search.IndexSearcher(Lucene.Net.Store.FSDirectory.Open(new DirectoryInfo("./index/")), true);
var topDocs = searcher.Search(query, null, 10);
List<string> …Run Code Online (Sandbox Code Playgroud) 如何让我的正则表达式完全匹配一个条件?
例如,我有以下正则表达式:
(\w+)(?=ly|es|s|y)
Run Code Online (Sandbox Code Playgroud)
将表达式与"眼镜"这个词匹配会返回:
glasse
Run Code Online (Sandbox Code Playgroud)
正确的匹配应该是:
glass (match should be on 'es' rather than 's' as in the match above)
Run Code Online (Sandbox Code Playgroud)
表达式应该适用于任何类型的单词,例如:
films
lovely
glasses
glass
Run Code Online (Sandbox Code Playgroud)
目前正则表达式与上述单词匹配为:
film - correct
lovel - incorrect
glasse - incorrect
glas - incorrect
Run Code Online (Sandbox Code Playgroud)
这些单词的正确匹配应为:
film
love
glass
glass
Run Code Online (Sandbox Code Playgroud)
我现在遇到的问题是我不确定如何调整我的正则表达式以正确地满足's'或'es',因为一个单词可以包含诸如"眼镜"之类的两个单词.
谢谢你到目前为止的答案.我很欣赏词干的复杂性和语言知识的要求.然而,在我的特定情况下,单词是有限的(电影,可爱,眼镜和玻璃),因此我只会在上面的表达式中遇到这些单词和后缀.我没有特定的申请.我只是想知道是否可以使用正则表达式.我得出的结论是,这是不可能的,但是以下是可能的:
找到或找不到匹配项,例如匹配眼镜但不是玻璃,但DO匹配电影:
film (match) - (films)
glass (match) - (glasses)
glass (no match) - (glass)
Run Code Online (Sandbox Code Playgroud)
我在想的是,是否有一种方法可以将后缀与末尾的字符串完全匹配.在上面的例子中,'es'匹配glass,因此条件's'被丢弃.在玻璃的情况下(不匹配)条件's'被丢弃,因为另一个's'在它之前,它不完全匹配.我必须承认我不是百分之百关于这一点所以我的逻辑可能看起来有点不对劲,这只是一个想法.
有谁知道如何解决这个文件读取错误,TreeTagger这是一个常用的自然语言处理工具用于POS标记,lemmatize和块句?
alvas@ikoma:~/treetagger$ echo 'Hello world!' | cmd/tree-tagger-english
reading parameters ...
ERROR: Can't open for reading: /home/alvas/treetagger/lib/english.par
aborted.
Run Code Online (Sandbox Code Playgroud)
我没有遇到任何可能的安装问题,如http://www.ims.uni-stuttgart.de/projekte/corplex/TreeTagger/installation-hints.txt中暗示的那样.我已按照网页上的说明正确安装(http://www.ims.uni-stuttgart.de/projekte/corplex/TreeTagger/#Linux):
alvas@ikoma:~$ mkdir treetagger
alvas@ikoma:~$ cd treetagger
alvas@ikoma:~/treetagger$ wget ftp://ftp.ims.uni-stuttgart.de/pub/corpora/tree-tagger-linux-3.2.tar.gz
alvas@ikoma:~/treetagger$ wget ftp://ftp.ims.uni-stuttgart.de/pub/corpora/tagger-scripts.tar.gz
alvas@ikoma:~/treetagger$ wget ftp://ftp.ims.uni-stuttgart.de/pub/corpora/install-tagger.sh
alvas@ikoma:~/treetagger$ wget ftp://ftp.ims.uni-stuttgart.de/pub/corpora/dutch-par-linux-3.2-utf8.bin.gz
alvas@ikoma:~/treetagger$ wget ftp://ftp.ims.uni-stuttgart.de/pub/corpora/german-par-linux-3.2-utf8.bin.gz
alvas@ikoma:~/treetagger$ wget ftp://ftp.ims.uni-stuttgart.de/pub/corpora/italian-par-linux-3.2-utf8.bin.gz
alvas@ikoma:~/treetagger$ wget ftp://ftp.ims.uni-stuttgart.de/pub/corpora/spanish-par-linux-3.2-utf8.bin.gz
alvas@ikoma:~/treetagger$ wget ftp://ftp.ims.uni-stuttgart.de/pub/corpora/french-par-linux-3.2-utf8.bin.gz
alvas@ikoma:~/treetagger$ sh install-tagger.sh
Linux version of TreeTagger installed.
Tagging scripts installed.
German parameter file (Linux, UTF8) installed.
German chunker parameter file (Linux) installed.
French …Run Code Online (Sandbox Code Playgroud) 我想在这里使用词干分析器来合并字数.
http://snowball.tartarus.org/download.html
该页面有一个下载链接,但我不确定如何将文件集成到我的eclipse项目中
它不仅仅是一个放入我的lib文件夹的jar,它是一个文件系统.有没有人知道解释这个的一些文件,因为我在网站上没有看到任何文件.
(如,我要导入什么,如何调用它等...)
我尝试进行词形还原,即识别引理和可能的动词的阿拉伯词根,例如:يتصل==> lemma(动词的不定式)==>اتصل==> root(triliteral root/Jidr thoulathi)== >وصل
你认为斯坦福NLP能做到吗?
最好的祝福,
我最近开始研究关于德语文本的情绪分析项目,我计划使用词干分析器来改善结果.
NLTK配有德国Snowball Stemmer并且我已经尝试过使用它,但我不确定结果.也许它应该是这样的,但作为一个计算机科学家,而不是一个语言学家,我有一个问题,变形动词形式源于不同的词干.
取"suchen"(搜索)这个词,对于第一人称单数而言应该是"这样的",而对于第三人称单数则是"如此".
我知道还有词形还原,但据我所知,没有可用的德语引理器集成到NLTK中.有GermaNet,但他们的NLTK集成似乎已经中止.
重点:我想将变形动词形式归结为相同的词干,至少对于同一时态内的常规动词.如果这对我的目标不是一个有用的要求,请告诉我原因.如果是,您是否知道可以使用哪些其他资源来帮助我实现这一目标?
编辑:我忘了提及,任何软件都应该可以免费用于教育和研究目的.
我想对一些意大利语文本进行词素化,以便对单词进行频率计数,并对这种词素化内容的输出进行进一步调查。
我更喜欢使用词组比词干,因为我可以从句子中的上下文中提取单词含义(例如,区分动词和名词)并获取语言中存在的单词,而不是那些通常没有的单词的词根一个意义。
我发现这个名为pattern(pip2 install pattern)的库应该进行补充nltk以执行意大利语的词素化,但是我不确定以下方法是否正确,因为每个单词都是由词素化的,而不是在句子的上下文中。
可能我应该pattern负责将一个句子标记化(因此也要用有关动词/名词/形容词的元数据对每个单词进行注释),然后检索经过修饰的单词,但是我无法做到这一点,我甚至不确定是目前可能吗?
另外:在意大利语中,有些文章带有撇号,因此“ l'appartamento”(英语为“ the flat”)实际上是2个字:“ lo”和“ appartamento”。现在,我无法找到将组合在一起的两个单词分开的方法nltk,pattern因此无法以正确的方式计算单词的出现频率。
import nltk
import string
import pattern
# dictionary of Italian stop-words
it_stop_words = nltk.corpus.stopwords.words('italian')
# Snowball stemmer with rules for the Italian language
ita_stemmer = nltk.stem.snowball.ItalianStemmer()
# the following function is just to get the lemma
# out of the original input word (but right now
# it may be loosing the context about …Run Code Online (Sandbox Code Playgroud) 我知道如何在单个单词上执行SnowballStemmer(在我的情况下,在俄语单词上).做下一件事:
from nltk.stem.snowball import SnowballStemmer
stemmer = SnowballStemmer("russian")
stemmer.stem("???????")
'?????'
Run Code Online (Sandbox Code Playgroud)
如果我有一个像['Василий','Геннадий','Виталий']这样的单词列表,我该怎么办呢?
我使用for循环的方法似乎不起作用:(
l=[stemmer.stem(word) for word in l]
Run Code Online (Sandbox Code Playgroud) stemming ×10
nlp ×5
snowball ×4
nltk ×3
python ×3
installation ×1
java ×1
lucene.net ×1
pos-tagger ×1
python-2.7 ×1
regex ×1
stanford-nlp ×1