pnm*_*nmn 9 iphone count nsstring uitextview ipad
我正在尝试为使用UITextView的应用程序实现字数统计功能.
英语中两个单词之间有一个空格,因此在英语句子中计算单词数量非常容易.中文和日文单词计数会出现问题,因为通常整个句子中没有任何空格.
我在iPad中检查了三个具有字数统计功能的不同文本编辑器,并将它们与MS Words进行比较.
例如,这里有一系列日文字符意味着世界的想法:世界(世界)の('s)アイデア(想法)
世界のアイデア
1)iPad和MS的页面单词将每个字符计为一个单词,因此它包含7个单词.
2)iPad文本编辑器P***将整个计为一个单词 - >他们只是用空格来分隔单词.
3)iPad文本编辑器i***将它们视为三个单词 - >我相信他们将CFStringTokenizer与kCFStringTokenizerUnitWord一起使用,因为我可以获得相同的结果)
我在互联网上进行过研究,而Pages和MS Words的单词计数似乎是正确的,因为每个汉字都有意义.
我找不到任何类似Pages或MS Words这样的词的类,从头开始实现它是非常困难的,因为除了日语和中文之外,iPad还支持很多不同的外语.
我认为CFStringTokenizer与kCFStringTokenizerUnitWord是最好的选择.
有没有办法计算NSString中的单词,如Pages和MSWords?
谢谢
如果您的字符串不包含识别断词的标记(如空格),这将是一个非常困难的问题。我知道尝试解决字谜的一种方法是:
在字符串的开头,您以一个字符开始。是一个词吗?它可以是“A”等单词,但也可以是“AN”或“ANALOG”等单词的一部分。因此,必须考虑整个字符串来决定什么是单词。您将考虑下一个字符,看看是否可以从您认为可能找到的第一个单词后面的第一个字符开始创建另一个单词。如果您确定单词是“A”并且只剩下“NALOG”,那么您很快就会发现没有更多单词可找到。当您开始在字典中查找单词(见下文)时,您就知道您正在对单词的断开位置做出正确的选择。当你不再寻找词语时,你就知道你做出了错误的选择,你需要回头。
其中很大一部分是拥有足以包含您可能遇到的任何单词的词典。英语资源是 TWL06 或 SOWPODS 或其他拼字词典,包含许多晦涩的单词。您需要大量内存来执行此操作,因为如果您根据包含所有可能单词的简单数组检查单词,您的程序将运行得非常慢。如果您解析字典,将其保留为 plist 并重新创建字典,您的检查将足够快,但它将需要更多的磁盘空间和更多的内存空间。这些大型拼字词典之一可以扩展到大约 10MB,以实际单词作为键,用一个简单的 NSNumber 作为值的占位符 - 你不关心值是什么,只关心键存在于字典中,它告诉你该词被认为是有效的。
如果你在计数时维护一个数组,那么当你将包含最后一个字符的最后一个单词添加到数组中时,你就会以胜利的方式进行[数组计数],但你也有一种简单的回溯方法。如果在某个时候您无法找到有效的单词,您可以将 lastObject 从数组中弹出并在字符串的开头替换它,然后开始寻找替代单词。如果这不能让你回到正轨,那就再说一句话。
我将继续进行实验,在解析字符串时寻找前面可能的三个单词 - 当您确定了三个潜在的单词时,取出第一个单词,将其存储在数组中并查找另一个单词。如果您发现这样做太慢,并且仅考虑前面的两个单词就可以得到不错的结果,请将其减少到两个。如果您发现您的分词策略遇到了太多死胡同,那么请增加您考虑的前面的单词数。
另一种方法是采用自然语言规则 - 例如“A”和“NALOG”可能看起来不错,因为“A”后面有辅音,但“A”和“ARDVARK”将被排除,因为它对于单词来说是正确的以元音开头,跟随“AN”,而不是“A”。这可以变得像你想的那样复杂 - 我不知道这在日语中是否会变得更简单,但肯定有常见的动词结尾,例如“ma su”。
(编辑:开始赏金,如果我的方式不是的话,我想知道最好的方法。)
归档时间: |
|
查看次数: |
2639 次 |
最近记录: |