import SwiftUI
import NaturalLanguage
import CoreML
import UIKit
import CoreData
struct wve: View {
@State var aaa = [String]()
@FetchRequest(entity: Product.entity(),
sortDescriptors: [NSSortDescriptor(key: "name", ascending: true)])
var products2: FetchedResults<Product>
@State private var showingSheet = false
@AppStorage("tapCount") private var tapCount = 0
@AppStorage("输入") private var shuru = "我要投资"
@AppStorage("新闻") private var texts =
"""
当然了,宝丰能源是很优秀的企业,不过在中国做氢能源,而且要做到未来10年比如30%的市场占有率,我说3个我觉得有可能的公司,中国石化(SH600028)中国神华(SH601088)宝钢股份(SH600019),3家企业占有氢能源的几项壁垒(不是一一对应的),渠道、氢元素来源和市场//@郭荆璞:我不这么看,不过我理解你的看法了
"""
var container = AttributeContainer()
@State var results = [TaskEntry1]()
@ObservedObject var news: 新闻数据
@ObservedObject var labelnews: 标注数据
@State var attext :AttributedString = ""
@State var keys = [String]()
@State var values = [Double]()
@State var 识别结果=""
@State var 投资投机判定结果=""
@State var 输入的投资投机判定结果="22"
@State var jieguo=""
@AppStorage("语录") private var 语录 = "永远不要问理发师你是否需要理发。"
// @State var attributeContainer = AttributeContainer()
enum 样式 {
case 重要, 风险, important
}
@State var 成长样式 = 样式.重要
var attributeContainer: AttributeContainer {
var container = AttributeContainer()
switch 成长样式 {
case .重要:
container.font = .custom("Menlo", size: 17, relativeTo: .body)
container.foregroundColor = .red
container.backgroundColor = .yellow
container.font = .title3
case .风险:
container.font = .custom("Times New Roman", size: 17, relativeTo: .body)
container.foregroundColor = .blue
container.backgroundColor = .gray
default:
break
}
return container
}
var body: some View {
VStack{
Menu("选项") {
Button("Show Sheet") {
showingSheet.toggle()
}
// .sheet(isPresented: $showingSheet) {
// SheetView()
// }
Menu("停用词") {
Button("增加") {
showingSheet.toggle()
}
// .sheet(isPresented: $showingSheet) {
// SheetView()
// }
Button("删除", action: mlacc)}
}.padding(.leading, 300)
HStack{
VStack{
Text("判定").font(.headline)
Divider().frame(width:100, height:10)
Text(投资投机判定结果+"新闻").font(.caption).bold()
.foregroundColor(投资投机判定结果=="投机" ?.red :.blue)
.underline()
.onAppear(perform: {
loadData()
投资投机判定结果 = touzitouji(text:texts)
})
Text("关键词").font(.headline).onAppear(perform: {
news.fenci1()
for aRate in products2 {
news.aa.append(aRate.name!)
}
})
Divider().frame(width:100, height:10)
List{ForEach(keys.indices,id:\.self) {index in
HStack {
Text(keys[index]).font(.footnote)
Text("\(values[index],specifier: "%.0f")").foregroundColor(.secondary).font(.footnote)
}}}.frame(width:100,height:300)
.onAppear(perform: {let bagOfWords = news.获取高频词(text: texts)
let 筛选后字典 = bagOfWords.sorted{ $0.1 > $1.1 }.filter { $0.1 > 5 }
keys = 筛选后字典.map{$0.key}
values = 筛选后字典.map {$0.value}
})
Button("修改停用词") {
showingSheet.toggle()
for aRate in products2 {
news.aa.append(aRate.name!)
}
}
.sheet(isPresented: $showingSheet) {
xianshi()
}}
let attext: AttributedString = {
do {
var text = try AttributedString(markdown: texts)
// for lie in labelnews.黄色列表 {
// if let range = text.range(of: lie,options: .regularExpression) {
//// text.characters.replaceSubrange(range, with: lie+"(资产)")
// text[range].backgroundColor = .purple
//
// text[range].font = .footnote
//
// }
// }
for lie in labelnews.成长列表 {
if let range = text.range(of: lie,options: .regularExpression) {
text[range].mergeAttributes(attributeContainer)
}
}
for lie in labelnews.风险列表 {
if let range = text.range(of: lie,options: .regularExpression) {
text[range].foregroundColor = .teal
text[range].font = .headline
}
}
// for lie in labelnews.绿色列表 {
// if let range = text.range(of: lie) {
// text[range].backgroundColor = .cyan
// text[range].foregroundColor = .red
// text[range].font = .footnote
// // text[range].font = UIFont.boldSystemFont(ofSize: 15)
// text.characters.replaceSubrange(range, with: lie+"(企业的根本)")
// }
// }
return text
} catch {
return ""}}()
VStack{Text("新闻").font(.headline)
Divider()
ScrollView{
Text(attext).onTapGesture(count: 1) {
tapCount += 1
texts = aaa.randomElement()!
投资投机判定结果 = touzitouji(text: texts)
let bagOfWords = news.获取高频词(text: texts)
let 筛选后字典 = bagOfWords.sorted{ $0.1 > $1.1 }.filter { $0.1 > 1 }
keys = 筛选后字典.map{$0.key}
values = 筛选后字典.map {$0.value}
}
}.padding(EdgeInsets(top: 2, leading: 5, bottom: 5, trailing: 5))}
}
ScrollView{
Text(语录+"\n--巴菲特").multilineTextAlignment(.trailing).onTapGesture(count: 1) {
语录 = labelnews.巴菲特语录.randomElement()!
}}
.padding(EdgeInsets(top: 10, leading: 15, bottom: 5, trailing: 15)).foregroundColor(.blue)
.font(.subheadline)
.frame(width:390,height:70)
.background(.yellow)
.cornerRadius(20)
.overlay(
RoundedRectangle(cornerRadius: 20)
.stroke(Color.blue, lineWidth: 5)
)
VStack{
TextEditor(text: $shuru)
.frame(height:50)
//##牛逼
.onTapGesture {
UIApplication.shared.endEditing()
}
Button("搜索"){
输入的投资投机判定结果=touzitouji(text:shuru)
news.tokenizeText(text: texts, shuru: shuru)
}.roundedButtonStyle()
}
Text(输入的投资投机判定结果).font(.caption).bold()
.foregroundColor(投资投机判定结果=="投机" ?.red :.blue)
.underline()
.onAppear(perform: {
输入的投资投机判定结果 = touzitouji(text:shuru)
})
ScrollView{
Text(news.显示字典).multilineTextAlignment(.leading).frame(width:350)
}.frame(height:50) }}
func touzitouji(text:String) -> String {
do {
jieguo = ""
let mlModel = try touzitouji_1(configuration: MLModelConfiguration()).model
let sentimentPredictor = try NLModel(mlModel: mlModel)
jieguo = sentimentPredictor.predictedLabel(for: text)!
}
catch {
print(error)
}
return jieguo }
func mlacc() {
do {
识别结果=""
let mlModel = try AppleTagger(configuration: MLModelConfiguration()).model
let customModel = try NLModel(mlModel: mlModel)
let customTagScheme = NLTagScheme("Apple")
let tagger = NLTagger(tagSchemes: [.nameType, customTagScheme])
tagger.string = texts
tagger.setModels([customModel], forTagScheme: customTagScheme)
tagger.enumerateTags(in: texts.startIndex..<texts.endIndex, unit: .word,scheme: customTagScheme, options: .omitWhitespace) { tag, tokenRange in
if tag!.rawValue != "NONE" {
识别结果+="\(texts[tokenRange]): \(tag!.rawValue)\n"
}
return true
}
} catch {
print(error)
}
}
func loadData() {
guard let url = URL(string:"https://rgqalhxxrbfc7l75xyowue4o3q0bdtgd.lambda-url.ap-southeast-1.on.aws/") else {
print("Invalid URL")
return
}
let request = URLRequest(url: url)
URLSession.shared.dataTask(with: request) { data, response, error in
if let data = data {
if let response = try? JSONDecoder().decode([TaskEntry1].self, from: data) {
DispatchQueue.main.async {
self.results = response
for i in results{
aaa.append(i.name)
}
}
return
}
}
}.resume()
}
}
struct TaskEntry1: Decodable,Identifiable{
var id:Int
var name: String
}
struct ceshiPreviews: PreviewProvider {
static var previews: some View {
wve(news: 新闻数据(),labelnews: 标注数据())
.environment(\.managedObjectContext,PersistenceController.shared.container.viewContext)
}
}