2017-08-24 10 views
1

文から人名を取得する必要があります。文から名前を抽出する

例:My Name is David Bonds and i live in new york.と名前を抽出したいDavid Bonds

My Name isは間違いなくすべての文章に含まれます。名前の後ろには文の残りが含まれている場合もあれば、何もない場合もあります。このanswerから、私はMy Name isのポイントに到達することができました。それはすべての文章の残りを印刷します。私はそれがちょうどnext two wordsをつかむことを確認したいと思う。

if let range = conversation.range(of: "My Name is") { 
    let name = conversation.substring(from: range.upperBound).trimmingCharacters(in: .whitespacesAndNewlines) 
    print(name) 
} 

答えて

3

残りのテキストがある場合は、「」で区切ることができます。

let array = text.components(separatedBy: " ") 

//first name 
print(array[0]) 

//last name 
print(array[1]) 
1

利用コードの下

let sen = "My Name is David Bonds and i live in new york." 

let arrSen = sen.components(separatedBy: "My Name is ") 
print(arrSen) 

let sen0 = arrSen[1] 

let arrsen0 = sen0.components(separatedBy: " ") 
print("\(arrsen0[0]) \(arrsen0[1])") 

出力姓名され、その後第一及びsecont要素:

enter image description here

+0

は常に 'and'キーワードがあるでしょう島嶼地区などができないからです。 –

+0

@ImBatman更新された答えを確認してください。 –

+1

@ImBatmanあなたは本当にアビザンの答えのような語彙タグを使用するべきです。 – Fogmeister

2

次のようにあなたはそれを実現することができます。

let myString = "My Name is David Bonds and i live in new york." 

// all words after "My Name is" 
let words = String(myString.characters.dropFirst(11)).components(separatedBy: " ") 

let name = words[0] + " " + words[1] 

print(name) // David Bonds 
発言として

dropFirst(11)必要がありますが、文字のその数は11

0

あるので、あなたは接頭辞文字列「私を削除することができ、名前の前にあるべき「私の名前はある」とかなり確信してであれば正常に動作します名前はDavid "とし、" "で区切ります。

あなたがデータを方法に応じ
var sentence = "My Name is David Bonds and" 
let prefix = "My Name is " 

sentence.removeSubrange(sentence.range(of: prefix)!) 
let array = sentence.components(separatedBy: " ") 
print("Name: ", array[0],array[1]) // Name: David Bonds 
0

let string = "My Name is David Bonds and i live in new york." 

let names = string.components(separatedBy: " ")[3...4] 
let name = names.joined(separator: " ") 
6

それはほとんどNSLinguisticTaggerを使用すると、少し簡単であるスウィフト4、iOSの11のための時間です。

今後の参考として、NSLinguisticTaggerを使用して文章から名前を抽出することができます。これは、名前付きトークンに続く名前、または2語の名前に依存しません。

これはXcodeの9遊び場私の文章中

import UIKit 

let sentence = "My Name is David Bonds and I live in new york." 

// Create the tagger's options and language scheme 
let options: NSLinguisticTagger.Options = [.omitWhitespace, .omitPunctuation, .joinNames] 
let schemes = NSLinguisticTagger.availableTagSchemes(forLanguage: "en") 

// Create a tagger 
let tagger = NSLinguisticTagger(tagSchemes: schemes, options: Int(options.rawValue)) 
tagger.string = sentence 
let range = NSRange(location: 0, length: sentence.count) 

// Enumerate the found tags. In this case print a name if it is found. 
tagger.enumerateTags(in: range, unit: .word, scheme: .nameType, options: options) { (tag, tokenRange, _) in 
    guard let tag = tag, tag == .personalName else { return } 
    let name = (sentence as NSString).substring(with: tokenRange) 
    print(name) // -> Prints "David Bonds" to the console. 
} 
+1

Damnit!あなたは私の前にそこに着いた。私は同様の回答を掲載しようとしていました。これはiOS 5以降では可能ですが使用するのには若干難しいことに注意してください:D – Fogmeister

+2

何回起こったのですか?時々誰もが太陽が輝いています:) – Abizern

関連する問題