swiftui代码

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)
    }
}

 

posted @ 2022-07-20 17:05  速搞  阅读(76)  评论(0)    收藏  举报