如何替换文本字段中的单词以更改为另一个文本字段中的其他单词?

时间:2014-06-04 04:43:00

标签: ios objective-c uitextfield words

适用于Xcode 5和iOS应用;我正在使用Objective-C代码。

好的,例如,如果我放入第一个文本字段"我出生于1995年。"当我点击一个转换按钮时,我想要它说"我是在1995年左右构思的。"我怎么能这样做呢?我遇到的问题是能够用另一个词替换一个单词。

比如,如何在文本字段中返回什么内容以将可能的单词替换为人类输入的内容?有点像翻译应用程序,它取代单词的方式。

我的问题是,如果用户要在文本字段中输入任何内容,那么就会使用具有同义词的单词为其重新定义。

是的,它是关于替换子串,但它将取代用户输入的任何内容

我理解stringByReplacingOccurrencesOfString:withString:是有意义的,但是在那之后会应用于用户键入的内容会怎样?

基本上,让我们说一个翻译应用程序。如果我输入:"我很聪明。"它会改写为:"我非常聪明。"它必须处理用户输入的内容。

3 个答案:

答案 0 :(得分:0)

如果字符串在NSString中,则可以使用stringByReplacingOccurrencesOfString:withString:方法。

NSString *str = @"I was born in 1995.";

str = [str stringByReplacingOccurrencesOfString:@"born in" withString:@"conceived circa"];

不确定这是不是你的意思。

答案 1 :(得分:0)

如果有一个词,你想找到具有相似含义的词。您将需要大量数据 - 按意义分组的单词数组。根据上下文,给定的单词可能出现在其中几个数组中(语言的机器解释很难......)。

将字符串分隔为单词的简便方法是将componentsSeparatedByString:@" "字符串一起使用。之后,您需要确定要尝试和替换的字符串。他们是否使用下面描述的字典返回任何有用的东西是一种决定方法。

特定单词可用作返回数组数组的字典的键。让我们说这个词是“铁”。当您将其用作主字典中的键时,它将返回包含三个数组的数组。其中一个是所有的单词(如NSStrings),意思是“元素铁”,另一个是所有的单词,意思是“带有热工具的光滑衣服”,如“按压”或“平滑”,在另一个是工具般的用途如“射铁”,“品牌铁”等。

你要做的最难的事情是确定上下文并选择正确的数组,否则你最终会产生废话。

确定上下文后,您可以从所选数组中选择任何其他单词,将其替换为句子,然后处理您要替换的其他单词。

分隔字符串,例如

NSString *string = @"I am very smart."

你会用

NSArray *words = [string componentsSeparatedByString:@" "];

你可以用

迭代单词
for(NSString *word in words) {
    // do something with NSString *word here
}

这里有一个关于构建主词典的快速看法 - 它还没有运行但我确信有人会发现是否有错误...

// NSArray *arrayOfArraysOfSimilarWords; <- populated elsewhere, as shown below
// array
//   |
//   - "cat", "feline", "pussycat", "gato"
//   - "shoe", "pump", "clog", "trainer"

NSMutableDictionary *masterDictionary = [NSMutableDictionary dictionary];

for(NSArray *wordArray in arrayOfArraysOfSimilarWords) {

    for(NSString *word in wordArray) {

        NSArray *arrayOfWordArrays = masterDictionary[word];

        if(arrayOfWordArrays == nil) {
            masterDictionary[word] = @[wordArray];
        } else {
            // entry exists
            NSSet *wordArraySet = [NSSet setWithArray:arrayOfWordArrays];
            if([wordArraySet containsObject:wordArray]) {
                // this word array is already returned as a result for this word
                continue;
            }
            // there is no entry for this word array yet - add an array containing the current word array
            NSMutableArray *newArrayOfWordArrays = [NSMutableArray arrayWithArray:arrayOfWordArrays];
            [newArrayOfWordArrays addObject:wordArray];
            masterDictionary[word] = newArrayOfWordArrays;
        }
    }
}

答案 2 :(得分:0)

如果您在用户输入时尝试替换字符串,则可能需要使用UITextFieldDelegate方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

在UITextField中的每个字符插入(或文本粘贴)上调用此方法。

伪代码(因为我正在写这篇文章):

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSMutableString *proposedText = [textField.text mutableCopy];
    [proposedText replaceCharactersInRange:range withString:string];

    if (proposedText contains word I want to replace)
    {
       replace word in proposedText

       textField.text = proposedText;
       textField.selectedTextRange = new selection

       return NO;
    }

    return YES; 
}

希望这有帮助。