cell数据的模型类调用


1.创建读取存放数据源信息类(cellModel)

//创建cell的数据模型类,用来保存一个cell的所有数据

@interface CellModel : NSObject

//保存图标名称

@property(nonatomic,copy)NSString *icon;

//保存发行公司名称

@property(nonatomic,copy)NSString *publisher;

//保存应用名称

@property(nonatomic,copy)NSString *name;

//保存投票人数

@property(nonatomic,copy)NSString *numRatings;

//保存价格

@property(nonatomic,copy)NSString *price;

//保存评分

@property(nonatomic,copy)NSString *rating;

//类的初始化方法

- (instancetype)initWithDictionary:(NSDictionary *)dict;

+ (id)cellModelWithDictionary:(NSDictionary *)dict;

@end


1.1创建类的初始化方法,根据传入的原始数据信息保存配置本身的属性

- (instancetype)initWithDictionary:(NSDictionary *)dict

{

    if (self = [super init]) {   

            _icon = [dict objectForKey:@"Icon"];

            _publisher = [dict objectForKey:@"Publisher"];

            _name = [dict objectForKey:@"Name"];

            _price = [dict objectForKey:@"Price"];

            _rating = [dict objectForKey:@"Rating"];

            _numRatings = [[dict objectForKey:@"NumRatings"] stringValue];     

    }  

    return self;

}


2.创建数据源信息类的加载管理类(dataModel)

@interface DataModel : NSObject

//保存所有数据

@property(nonatomic,retain)NSMutableArray *arrayData;

//类的单例初始化方法

+ (DataModel *)sharedDataModel;

@end

2.1重写类的初始化方法,解析加载数据文件,传递原始数据信息调用cellModel的初始化方法实例化数据源信息类cellModel

- (instancetype)init

{

    if (self = [super init]) { 

        _arrayData = [NSMutableArray array];       

        //读取plist文件路径

        NSString *plistPath = [[NSBundle mainBundle]pathForResource:@"Data" ofType:@"plist"];

        //读取plist内容

        NSArray *array = [NSArray arrayWithContentsOfFile:plistPath];        

        //遍历数据,将数据转换成cell的模型

        for (NSDictionary *dict in array) {

            CellModel *model = [[CellModel alloc]initWithDictionary:dict];


 2.2将实例化创建出来的cellModel对象保存到数据管理类(dataModel)的arrayData属性中

            [_arrayData addObject:model];    

        }

    }    

    return self;

}





3.创建单列方法提供实例化信息管理类(dataModel)的方法

//创建单例对象

+ (DataModel *)sharedDataModel

{

    static DataModel *dm = nil;

    if (dm == nil) { 

        dm = [[DataModel alloc]init];

    }

    return dm;

}


4.重写视图控制器的数据源属性arrayData的get方法来实例化数据源管理类对象

- (NSArray *)arrayData

{

    if (_arrayData == nil) {

        _dm = [DataModel sharedDataModel];


4.1将实例化出来的数据源管理类对象的arrData属性赋值给视图控制器的arrdata属性中

        _arrayData = _dm.arrayData;

    }

    return _arrayData;

}





5.在视图控制器的表视图的数据源协议方法里创建cellModel类型对象并将arrayData的对应的数据信息赋值给cellModel类型对象

    CellModel *cellModel = [self.arrayData objectAtIndex:indexPath.row];


5.1配置表视图的cell的属性通过获取到的cellModel类型的对象
5.1创建自定义cell类的初始化方法,传递tableView参数实例化自定义cell

+ (MyTableViewCell *)cellWithTableView:(UITableView *)tableView

{

    static NSString *cellID = @"cellID";

    //创建自定义cell对象

    MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];

    if (cell == nil) {

        cell = [[MyTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];

    }

    return  cell;

}

5.2重写自定义cell类的属性cellModel的set方法,传递获取到的cellModel类型的对象初始化cell属性

- (void)setCellModel:(CellModel *)cellModel

{

    _cellModel = cellModel;

    self.iconView.image = [UIImage imageNamed:cellModel.icon];

    self.publishView.text = cellModel.publisher;

    self.priceView.text = cellModel.price;

    self.nameView.text = cellModel.name;

    self.numRatingsView.text = cellModel.numRatings;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会根据您的要求来回答问题。首先,为了进行外卖评论的分类,我们需要对数据进行预处理,具体步骤如下: 1. 导入所需库 ```python import pandas as pd import jieba ``` 2. 读取数据 ```python data = pd.read_csv('data.csv', encoding='utf-8') ``` 3. 数据清洗 去除无用的列和重复的行,并将评论内容转换为字符串类型。 ```python data.drop(['Unnamed: 0', 'shop_id', 'star', 'time'], axis=1, inplace=True) data.drop_duplicates(inplace=True) data['comment'] = data['comment'].astype(str) ``` 4. 分词 使用结巴分词对评论进行分词,并去除停用词。 ```python stopwords = pd.read_csv('stopwords.txt', sep='\t', header=None) stopwords = set(stopwords[0]) def cut_words(comment): words = jieba.cut(comment) words = [word for word in words if word not in stopwords] return ' '.join(words) data['comment'] = data['comment'].apply(cut_words) ``` 5. 划分数据集 将数据集划分为训练集和测试集。 ```python from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(data['comment'], data['label'], test_size=0.2, random_state=42) ``` 6. 特征提取 使用TF-IDF对文本进行特征提取。 ```python from sklearn.feature_extraction.text import TfidfVectorizer tfidf = TfidfVectorizer() X_train = tfidf.fit_transform(X_train) X_test = tfidf.transform(X_test) ``` 现在,我们可以开始进行分类了。下面,我分别介绍使用sklearn调用和自己编写模型类的方法。 ### 使用sklearn调用 我们可以使用sklearn中的多种分类算法对数据进行分类。这里我选择使用朴素贝叶斯算法进行分类。 1. 训练模型 ```python from sklearn.naive_bayes import MultinomialNB clf = MultinomialNB() clf.fit(X_train, y_train) ``` 2. 预测结果 ```python y_pred = clf.predict(X_test) ``` 3. 评估模型 ```python from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score print('Accuracy:', accuracy_score(y_test, y_pred)) print('Precision:', precision_score(y_test, y_pred)) print('Recall:', recall_score(y_test, y_pred)) print('F1-score:', f1_score(y_test, y_pred)) ``` 4. 生成词云图 ```python from wordcloud import WordCloud import matplotlib.pyplot as plt pos_words = ' '.join(data[data['label'] == 1]['comment']) neg_words = ' '.join(data[data['label'] == 0]['comment']) pos_wordcloud = WordCloud(background_color='white', width=800, height=600).generate(pos_words) neg_wordcloud = WordCloud(background_color='white', width=800, height=600).generate(neg_words) plt.imshow(pos_wordcloud) plt.axis('off') plt.show() plt.imshow(neg_wordcloud) plt.axis('off') plt.show() ``` ### 自己编写模型类 我们也可以自己编写模型类进行分类。这里我使用PyTorch和torchtext库进行编写。 1. 导入所需库 ```python import torch import torch.nn as nn import torch.optim as optim import torchtext from torchtext.data import Field, TabularDataset, BucketIterator ``` 2. 定义Field ```python TEXT = Field(tokenize='spacy', tokenizer_language='zh') LABEL = Field(sequential=False) ``` 3. 读取数据 ```python datafields = [('comment', TEXT), ('label', LABEL)] trn, tst = TabularDataset.splits(path='.', train='train.csv', test='test.csv', format='csv', fields=datafields) ``` 4. 构建词汇表 ```python TEXT.build_vocab(trn, max_size=8000) LABEL.build_vocab(trn) ``` 5. 定义模型类 ```python class SentimentClassifier(nn.Module): def __init__(self, input_dim, embedding_dim, hidden_dim, output_dim): super().__init__() self.embedding = nn.Embedding(input_dim, embedding_dim) self.rnn = nn.LSTM(embedding_dim, hidden_dim, num_layers=2, bidirectional=True, dropout=0.5) self.fc = nn.Linear(hidden_dim * 2, output_dim) self.dropout = nn.Dropout(0.5) def forward(self, text): embedded = self.dropout(self.embedding(text)) output, (hidden, cell) = self.rnn(embedded) hidden = self.dropout(torch.cat((hidden[-2,:,:], hidden[-1,:,:]), dim=1)) return self.fc(hidden) ``` 6. 训练模型 ```python device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') train_iterator, test_iterator = BucketIterator.splits((trn, tst), batch_size=32, device=device) model = SentimentClassifier(len(TEXT.vocab), 100, 256, len(LABEL.vocab)) optimizer = optim.Adam(model.parameters(), lr=1e-4) criterion = nn.CrossEntropyLoss() model = model.to(device) criterion = criterion.to(device) num_epochs = 10 for epoch in range(num_epochs): for batch in train_iterator: optimizer.zero_grad() text = batch.comment label = batch.label output = model(text).squeeze(1) loss = criterion(output, label) loss.backward() optimizer.step() print('Epoch:', epoch+1) ``` 7. 预测结果 ```python y_pred = [] for batch in test_iterator: text = batch.comment output = model(text).squeeze(1) pred = output.argmax(dim=1) y_pred.extend(pred.tolist()) ``` 8. 评估模型 ```python from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score y_test = [LABEL.vocab.stoi[label] for label in tst.examples[0].label] print('Accuracy:', accuracy_score(y_test, y_pred)) print('Precision:', precision_score(y_test, y_pred)) print('Recall:', recall_score(y_test, y_pred)) print('F1-score:', f1_score(y_test, y_pred)) ``` 9. 生成词云图 ```python pos_words = ' '.join(data[data['label'] == 1]['comment']) neg_words = ' '.join(data[data['label'] == 0]['comment']) pos_wordcloud = WordCloud(background_color='white', width=800, height=600).generate(pos_words) neg_wordcloud = WordCloud(background_color='white', width=800, height=600).generate(neg_words) plt.imshow(pos_wordcloud) plt.axis('off') plt.show() plt.imshow(neg_wordcloud) plt.axis('off') plt.show() ``` 以上就是对外卖评论进行分类并画出词云图的过程,希望能对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值