输入: "tableapplechairtablecupboard..."很多单词
将这样的文本拆分为单词列表并得到的有效算法是什么?
输出: ["table", "apple", "chair", "table", ["cupboard", ["cup", "board"]], ...]
想到的第一件事就是要经历所有可能的单词(从第一个字母开始)并找到最长的单词,继续 position=word_position+len(word)
PS
我们列出了所有可能的单词.
单词"橱柜"可以是"杯子"和"板子",选择最长.
语言:python,但主要的是算法本身.
???????????????
Run Code Online (Sandbox Code Playgroud)
itu oru stalam anu
这是一个Unicode字符串,这意味着这是一个地方
import nltk
nltk.wordpunct_tokenize('??????????????? '.decode('utf8'))
Run Code Online (Sandbox Code Playgroud)
不适合我.
nltk.word_tokenize('??????????????? '.decode('utf8'))
Run Code Online (Sandbox Code Playgroud)
也没有其他例子
"???????? " = ????? +????,
"???????" = ???? + ???
Run Code Online (Sandbox Code Playgroud)
右分裂:
??? ??? ?????? ???
Run Code Online (Sandbox Code Playgroud)
输出:
[u'\u0d07\u0d24\u0d4d\u0d12\u0d30\u0d41\u0d38\u0d4d\u0d25\u0d32\u0d02\u0d06\u0d23\u0d4d']
Run Code Online (Sandbox Code Playgroud)
我只需要拆分单词,如另一个例子中所示.其他示例部分用于测试.问题不在于Unicode.它具有语言形态.为此你需要使用形态分析器
看看这篇论文.
http://link.springer.com/chapter/10.1007%2F978-3-642-27872-3_38
我正在研究将高棉语(柬埔寨语)的长行分成单个单词(UTF-8)的解决方案.高棉语不会在单词之间使用空格.有一些解决方案,但它们远远不够(这里和这里),那些项目已经落伍了.
以下是需要拆分的高棉样本行(它们可能比这更长):
ចូរសរសើរដល់ទ្រង់ទ្រង់បានប្រទានទាំងអស់នោះមកដល់រូបដោយព្រោះអង្គព្រះយេស៊ូវហើយដែលមិនអាចរកការទាំងអស់នោះដោយសារការប្រព្រឹត្តរបស់អ្នកឡើយឡើយ.
创建分裂高棉语的可行解决方案的目标有两个:它将鼓励那些使用高棉遗留(非Unicode)字体转换为Unicode(具有许多好处)的人,并且它将使遗留的高棉语字体能够被导入进入Unicode以快速使用拼写检查器(而不是手动浏览和分割单词,使用大文档,可能需要很长时间).
我不需要100%的准确度,但速度很重要(特别是因为需要分成高棉语的行可能很长).我愿意接受建议,但目前我有一大堆高棉语单词正确分割(有一个不间断的空格),我创建了一个单词概率词典文件(frequency.csv)作为字典用于分词器.
我在这里发现这个使用Viterbi算法的 python代码,它应该运行得很快.
import re
from itertools import groupby
def viterbi_segment(text):
probs, lasts = [1.0], [0]
for i in range(1, len(text) + 1):
prob_k, k = max((probs[j] * word_prob(text[j:i]), j)
for j in range(max(0, i - max_word_length), i))
probs.append(prob_k)
lasts.append(k)
words = []
i = len(text)
while 0 < i:
words.append(text[lasts[i]:i])
i = lasts[i]
words.reverse()
return words, probs[-1]
def word_prob(word): return dictionary.get(word, 0) / total
def words(text): return re.findall('[a-z]+', …Run Code Online (Sandbox Code Playgroud) python nlp word-boundary text-segmentation southeast-asian-languages
我正在使用Python和nltk.我需要用英语处理一些没有任何空格的文本,但nltk中的word_tokenize函数无法处理这样的问题.那么如何在没有任何空格的情况下标记文本.Python中有任何工具吗?
假设我有一个我想分析的域名列表.除非域名是连字符,否则我看不到一种特别简单的方法来"提取"域中使用的关键字.但我看到它在DomainTools.com,Estibot.com等网站上完成.例如:
ilikecheese.com becomes "i like cheese"
sanfranciscohotels.com becomes "san francisco hotels"
...
Run Code Online (Sandbox Code Playgroud)
有效和有效地实现这一目标的任何建议?
编辑:我想用PHP编写.
我有一个包含1000万个域名的列表,并且希望能够以编程方式将域中的英语单词分开,例如:
getheadphones.com导致"获取耳机"
我知道当我把getheadphones放在谷歌时,我得到"拿耳机",但不知道他们是如何做到这一点的,以及他们怎么知道这不是"拿到手机"
有任何想法吗?最好在php中.
我试图弄清楚从字典文件到给定字符串中识别英语单词的最佳匹配问题.
例如("lines"是字典单词列表):
string testStr = "cakeday";
for (int x= 0; x<= testStr.Length; x++)
{
string test = testStr.Substring(x);
if (test.Length > 0)
{
string test2 = testStr.Remove(counter);
int count = (from w in lines where w.Equals(test) || w.Equals(test2) select w).Count();
Console.WriteLine("Test: {0} / {1} : {2}", test, test2, count);
}
}
Run Code Online (Sandbox Code Playgroud)
给出输出:
Test: cakeday / : 0
Test: akeday / c : 1
Test: keday / ca : 0
Test: eday / cak : 0
Test: day / cake : …Run Code Online (Sandbox Code Playgroud) 简而言之 - 我想将这里问题的第一个答案从 Python 转换为 C#。我目前拆分连接词的解决方案是指数级的,我想要一个线性解决方案。我假设输入文本中没有间距和一致的大小写。
我希望使用 C# 将诸如“wickedweather”之类的连体字符串转换为单独的词,例如“wicked weather”。我已经创建了一个有效的解决方案,一个使用指数时间的递归函数,这对于我的目的来说根本不够有效(处理至少 100 多个连接词)。到目前为止,我已经阅读了这些问题,我认为这些问题可能会有所帮助,但我无法将他们的回答从 Python 转换为 C#。
这适用于只想在 C# 中拆分几个单词(< 50)并且并不真正关心效率的人。
我当前的解决方案计算出所有可能的单词组合,找到最可能的输出并显示。我目前将最可能的输出定义为使用最长单个单词的输出 - 我更喜欢使用不同的方法。这是我当前的解决方案,使用递归算法。
static public string find_words(string instring)
{
if (words.Contains(instring)) //where words is my dictionary of words
{
return instring;
}
if (solutions.ContainsKey(instring.ToString()))
{
return solutions[instring];
}
string bestSolution = "";
string solution = "";
for (int i = 1; i < instring.Length; i++)
{
string partOne = find_words(instring.Substring(0, i)); …Run Code Online (Sandbox Code Playgroud) 大家好,我有一些类似这样的文字
jameskach-->JamesKach firefighter11-->FireFighter11attackontitan-->AttackOnTitanlazyperson-->LazyPerson并非所有文本都相同,我只是展示一些示例,感谢任何帮助
我想从 NLTK 对非空白字符串获取形态分析结果。
例如:
字符串是"societynamebank".
我想要得到['society', 'name', 'bank']
如何在 NLTK 上获得该结果?